 0e6e359747
			
		
	
	0e6e359747
	
	
	
		
			
			* initial (broken) commit * small work on init * Update Items.py * beginning work, some rom patches * commit progress from bh branch * deathlink, fix soft-reset kill, e-tank loss * begin work on targeting new bhclient * write font * definitely didn't forget to add the other two hashes no * update to modern options, begin colors * fix 6th letter bug * palette shuffle + logic rewrite * fix a bunch of pointers * fix color changes, deathlink, and add wily 5 req * adjust weapon weakness generation * Update Rules.py * attempt wily 5 softlock fix * add explicit test for rbm weaknesses * fix difficulty and hard reset * fix connect deathlink and off by one item color * fix atomic fire again * de-jank deathlink * rewrite wily5 rule * fix rare solo-gen fill issue, hopefully * Update Client.py * fix wily 5 requirements * undo fill hook * fix picopico-kun rules * for real this time * update minimum damage requirement * begin move to procedure patch * finish move to APPP, allow rando boobeam, color updates * fix color bug, UT support? * what do you mean I forgot the procedure * fix UT? * plando weakness and fixes * sfx when item received, more time stopper edge cases * Update test_weakness.py * fix rules and color bug * fix color bug, support reduced flashing * major world overhaul * Update Locations.py * fix first found bugs * mypy cleanup * headerless roms * Update Rom.py * further cleanup * work on energylink * el fixes * update to energylink 2.0 packet * energylink balancing * potentially break other clients, more balancing * Update Items.py * remove startup change from basepatch we write that in patch, since we also need to clean the area before applying * el balancing and feedback * hopefully less test failures? * implement world version check * add weapon/health option * Update Rom.py * x/x2 * specials * Update Color.py * Update Options.py * finally apply location groups * bump minor version number instead * fix duplicate stage sends * validate wily 5, tests * see if renaming fixes * add shuffled weakness * remove passwords * refresh rbm select, fix wily 5 validation * forgot we can't check 0 * oops I broke the basepatch (remove failing test later) * fix solo gen fill error? * fix webhost patch recognition * fix imports, basepatch * move to flexibility metric for boss validation * special case boobeam trap * block strobe on stage select init * more energylink balancing * bump world version * wily HP inaccurate in validation * fix validation edge case * save last completed wily to data storage * mypy and pep8 cleanup * fix file browse validation * fix test failure, add enemy weakness * remove test seed * update enemy damage * inno setup * Update en_Mega Man 2.md * setup guide * Update en_Mega Man 2.md * finish plando weakness section * starting rbm edge case * remove * imports * properly wrap later weakness additions in regen playthrough * fix import * forgot readme * remove time stopper special casing since we moved to proper wily 5 validation, this special casing is no longer important * properly type added locations * Update CODEOWNERS * add animation reduction * deprioritize Time Stopper in rush checks * special case wily phase 1 * fix key error * forgot the test * music and general cleanup * the great rename * fix import * thanks pycharm * reorder palette shuffle * account for alien on shuffled weakness * apply suggestions * fix seedbleed * fix invalid buster passthrough * fix weakness landing beneath required amount * fix failsafe * finish music * fix Time Stopper on Flash/Alien * asar pls * Apply suggestions from code review Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * world helpers * init cleanup * apostrophes * clearer wording * mypy and cleanup * options doc cleanup * Update rom.py * rules cleanup * Update __init__.py * Update __init__.py * move to defaultdict * cleanup world helpers * Update __init__.py * remove unnecessary line from fill hook * forgot the other one * apply code review * remove collect * Update rules.py * forgot another --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
		
			
				
	
	
		
			91 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import DefaultDict
 | |
| from collections import defaultdict
 | |
| 
 | |
| MM2_WEAPON_ENCODING: DefaultDict[str, int] = defaultdict(lambda x: 0x6F, {
 | |
|     ' ': 0x40,
 | |
|     'A': 0x41,
 | |
|     'B': 0x42,
 | |
|     'C': 0x43,
 | |
|     'D': 0x44,
 | |
|     'E': 0x45,
 | |
|     'F': 0x46,
 | |
|     'G': 0x47,
 | |
|     'H': 0x48,
 | |
|     'I': 0x49,
 | |
|     'J': 0x4A,
 | |
|     'K': 0x4B,
 | |
|     'L': 0x4C,
 | |
|     'M': 0x4D,
 | |
|     'N': 0x4E,
 | |
|     'O': 0x4F,
 | |
|     'P': 0x50,
 | |
|     'Q': 0x51,
 | |
|     'R': 0x52,
 | |
|     'S': 0x53,
 | |
|     'T': 0x54,
 | |
|     'U': 0x55,
 | |
|     'V': 0x56,
 | |
|     'W': 0x57,
 | |
|     'X': 0x58,
 | |
|     'Y': 0x59,
 | |
|     'Z': 0x5A,
 | |
|     # 0x5B is the small r in Dr Light
 | |
|     '.': 0x5C,
 | |
|     ',': 0x5D,
 | |
|     '\'': 0x5E,
 | |
|     '!': 0x5F,
 | |
|     '(': 0x60,
 | |
|     ')': 0x61,
 | |
|     '#': 0x62,
 | |
|     '$': 0x63,
 | |
|     '%': 0x64,
 | |
|     '&': 0x65,
 | |
|     '*': 0x66,
 | |
|     '+': 0x67,
 | |
|     '/': 0x68,
 | |
|     '\\': 0x69,
 | |
|     ':': 0x6A,
 | |
|     ';': 0x6B,
 | |
|     '<': 0x6C,
 | |
|     '>': 0x6D,
 | |
|     '=': 0x6E,
 | |
|     '?': 0x6F,
 | |
|     '@': 0x70,
 | |
|     '[': 0x71,
 | |
|     ']': 0x72,
 | |
|     '^': 0x73,
 | |
|     '_': 0x74,
 | |
|     '`': 0x75,
 | |
|     '{': 0x76,
 | |
|     '}': 0x77,
 | |
|     '|': 0x78,
 | |
|     '~': 0x79,
 | |
|     '\"': 0x92,
 | |
|     '-': 0x94,
 | |
|     '0': 0xA0,
 | |
|     '1': 0xA1,
 | |
|     '2': 0xA2,
 | |
|     '3': 0xA3,
 | |
|     '4': 0xA4,
 | |
|     '5': 0xA5,
 | |
|     '6': 0xA6,
 | |
|     '7': 0xA7,
 | |
|     '8': 0xA8,
 | |
|     '9': 0xA9,
 | |
| })
 | |
| 
 | |
| 
 | |
| class MM2TextEntry:
 | |
|     def __init__(self, text: str = "", coords: int = 0x0B):
 | |
|         self.target_area: int = 0x25  # don't change
 | |
|         self.coords: int = coords  # 0xYX, Y can only be increments of 0x20
 | |
|         self.text: str = text
 | |
| 
 | |
|     def resolve(self) -> bytes:
 | |
|         data = bytearray()
 | |
|         data.append(self.target_area)
 | |
|         data.append(self.coords)
 | |
|         data.extend([MM2_WEAPON_ENCODING[x] for x in self.text.upper()])
 | |
|         data.extend([0x40] * (14 - len(self.text)))
 | |
|         return bytes(data)
 |