<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.supermetroid.run/index.php?action=history&amp;feed=atom&amp;title=User_talk%3AKejardon</id>
		<title>User talk:Kejardon - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.supermetroid.run/index.php?action=history&amp;feed=atom&amp;title=User_talk%3AKejardon"/>
		<link rel="alternate" type="text/html" href="https://wiki.supermetroid.run/index.php?title=User_talk:Kejardon&amp;action=history"/>
		<updated>2026-04-27T00:39:13Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki.supermetroid.run/index.php?title=User_talk:Kejardon&amp;diff=869&amp;oldid=prev</id>
		<title>Kejardon: I am failing all the maths</title>
		<link rel="alternate" type="text/html" href="https://wiki.supermetroid.run/index.php?title=User_talk:Kejardon&amp;diff=869&amp;oldid=prev"/>
				<updated>2012-11-19T20:39:16Z</updated>
		
		<summary type="html">&lt;p&gt;I am failing all the maths&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Semi-commented drop-chance code.&lt;br /&gt;
&lt;br /&gt;
Summary of it: Drop chance is a ratio of probabilities for each type of object:&lt;br /&gt;
&lt;br /&gt;
0 = Small energy, 1 = Large, 2 = missiles, 3 = nothing, 4 = super, 5 = power bomb&lt;br /&gt;
 Example:&lt;br /&gt;
 0x10, 0x20, 0x08, 0x20, 0x08, 0x08&lt;br /&gt;
 Total drop chance is 0x68. 2/13 chance of small energy, 4/13 large energy, 1/13 missiles, 4/13 nothing, 1/13 super missiles, 1/13 power bombs.&lt;br /&gt;
 Note: Default Super Metroid drop chances all(?) add up to 0xFF if I remember right.&lt;br /&gt;
Furthermore, these drop chances are lumped into two groups: 0-3 and 4-5. The value of these groups should add up to less than 256 or overflow errors will happen during item drop chance calculations.&lt;br /&gt;
&lt;br /&gt;
When a category is full (current == max, includes not having collected it yet), its probability is set to 0 and the other probabilities (in group one only, options 0-3) are multiplied to make up the difference. Group two, supers and power bombs, do NOT get their drop chance multiplied in this way - overflow probability defaults to dropping nothing.&lt;br /&gt;
 Example (using the drop chances from last):&lt;br /&gt;
 A person has full energy and full super missiles. Group 1 drops are multiplied by 13/6 to account for this. Final drop chances:&lt;br /&gt;
 1/6 missiles, 4/6 nothing, 1/13 power bombs.&lt;br /&gt;
 Total drop chance is ~91%. There is a ~9% chance of the drop defaulting to nothing (in addition to the given 4/6 drop chance).&lt;br /&gt;
&lt;br /&gt;
Note: The final chances are actually calculated as x/255 chance. The values are multiplied up to these odds and then rounded down to be (integer)/255 chance. This can cause particularly high rolls from the RNG to drop nothing even if nothing is not a drop option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$37106-$3725D&lt;br /&gt;
{&lt;br /&gt;
	PHX&lt;br /&gt;
	PHY&lt;br /&gt;
	PHB&lt;br /&gt;
	PEA #$A000&lt;br /&gt;
	PLB&lt;br /&gt;
	PLB&lt;br /&gt;
	LDA $7EF410, X&lt;br /&gt;
	AND #$7FFF&lt;br /&gt;
	STA $0E2A&lt;br /&gt;
	LDA $7EF3C8, X&lt;br /&gt;
	TAX&lt;br /&gt;
	STA $0E28&lt;br /&gt;
	LDA $A0003A, X ; Get drop selection&lt;br /&gt;
	TAX&lt;br /&gt;
&lt;br /&gt;
	BNE BRANCH_ALPHA&lt;br /&gt;
&lt;br /&gt;
	JMP $F24D  ;  Drop Nothing if no drop selection is given.&lt;br /&gt;
&lt;br /&gt;
BRANCH_ALPHA&lt;br /&gt;
&lt;br /&gt;
	JSL $808111  ;  Produce a random number&lt;br /&gt;
	AND #$00FF&lt;br /&gt;
&lt;br /&gt;
	BEQ BRANCH_ALPHA ; If number is 0, get a different number&lt;br /&gt;
&lt;br /&gt;
	STA $1A ;I'll call this 'drop chance quota'. It'll make sense later.&lt;br /&gt;
	LDA #$00FF&lt;br /&gt;
	STA $14&lt;br /&gt;
	STZ $18&lt;br /&gt;
	LDY #$0001 ; Default for $0E1A&lt;br /&gt;
	LDA $09C2 ; Current Health&lt;br /&gt;
	CLC&lt;br /&gt;
	ADC $09D6 ; Reserve Tank health&lt;br /&gt;
	CMP #$001E ; 30&lt;br /&gt;
&lt;br /&gt;
	BCC BRANCH_BETA&lt;br /&gt;
&lt;br /&gt;
	CMP #$0032 ; 50&lt;br /&gt;
&lt;br /&gt;
	BCC BRANCH_GAMMA&lt;br /&gt;
&lt;br /&gt;
	DEY&lt;br /&gt;
&lt;br /&gt;
BRANCH_BETA&lt;br /&gt;
&lt;br /&gt;
	STY $0E1A ; Basically, if total health is &amp;lt;30, set 0E1A. If &amp;gt;49, clear 0E1A. Else leave it alone.&lt;br /&gt;
&lt;br /&gt;
BRANCH_GAMMA&lt;br /&gt;
&lt;br /&gt;
	SEP #$20&lt;br /&gt;
	LDA $0E1A&lt;br /&gt;
&lt;br /&gt;
	BEQ BRANCH_DELTA ; If cleared, go to normal drops&lt;br /&gt;
&lt;br /&gt;
; This is for energy only drops.&lt;br /&gt;
	LDA $B40000, X&lt;br /&gt;
	CLC&lt;br /&gt;
	ADC $B40001, X&lt;br /&gt;
	STA $12 ;Set $12 to small and large enemy maximum&lt;br /&gt;
	LDA #$03&lt;br /&gt;
	STA $16 ;Set small and large energy drop opportunities&lt;br /&gt;
	JMP $F1DF  ;  Go to choose drop code&lt;br /&gt;
&lt;br /&gt;
BRANCH_DELTA&lt;br /&gt;
&lt;br /&gt;
	LDA $B40003, X&lt;br /&gt;
	STA $12 ;Set $12 to 'nothing' drop chance&lt;br /&gt;
	LDA #$08&lt;br /&gt;
	STA $16 ;Set nothing drop chance&lt;br /&gt;
	LDY $09C2&lt;br /&gt;
	CPY $09C4 ;Check health and max&lt;br /&gt;
&lt;br /&gt;
	BNE BRANCH_EPSILON&lt;br /&gt;
&lt;br /&gt;
	LDY $09D6&lt;br /&gt;
	CPY $09D4 ;Also reserves and max&lt;br /&gt;
&lt;br /&gt;
	BEQ BRANCH_ZETA&lt;br /&gt;
&lt;br /&gt;
BRANCH_EPSILON ;Enable energy drop&lt;br /&gt;
&lt;br /&gt;
	LDA $12&lt;br /&gt;
	CLC&lt;br /&gt;
	ADC $B40000, X ;Small drop&lt;br /&gt;
	ADC $B40001, X ;Large drop&lt;br /&gt;
	STA $12 ;Added chance for small and large energy&lt;br /&gt;
	LDA $16&lt;br /&gt;
	ORA #$03&lt;br /&gt;
	STA $16 ;Set small and large energy drop opportunities &lt;br /&gt;
&lt;br /&gt;
BRANCH_ZETA&lt;br /&gt;
&lt;br /&gt;
	LDY $09C6&lt;br /&gt;
	CPY $09C8 ;Check missiles and max&lt;br /&gt;
&lt;br /&gt;
	BEQ BRANCH_THETA&lt;br /&gt;
&lt;br /&gt;
	LDA $12&lt;br /&gt;
	CLC&lt;br /&gt;
	ADC $B40002, X&lt;br /&gt;
	STA $12 ;Add missile drop chance&lt;br /&gt;
	LDA $16&lt;br /&gt;
	ORA #$04&lt;br /&gt;
	STA $16 ;Add missile drop opportunity&lt;br /&gt;
&lt;br /&gt;
BRANCH_THETA&lt;br /&gt;
&lt;br /&gt;
	LDY $09CA&lt;br /&gt;
	CPY $09CC ;Check supers and max&lt;br /&gt;
&lt;br /&gt;
	BEQ BRANCH_IOTA&lt;br /&gt;
&lt;br /&gt;
	LDA $14&lt;br /&gt;
	SEC&lt;br /&gt;
	SBC $B40004, X&lt;br /&gt;
	STA $14 ;'Add' supers drop chance. Odd code, I know.&lt;br /&gt;
	LDA $16&lt;br /&gt;
	ORA #$10&lt;br /&gt;
	STA $16 ;Add super drop opportunity.&lt;br /&gt;
&lt;br /&gt;
BRANCH_IOTA&lt;br /&gt;
&lt;br /&gt;
	LDY $09CE&lt;br /&gt;
	CPY $09D0 ;Check power bombs and max&lt;br /&gt;
&lt;br /&gt;
	BEQ BRANCH_KAPPA&lt;br /&gt;
&lt;br /&gt;
	LDA $14&lt;br /&gt;
	SEC&lt;br /&gt;
	SBC $B40005, X&lt;br /&gt;
	STA $14 ;'Add' power bomb drop chance&lt;br /&gt;
	LDA $16&lt;br /&gt;
	ORA #$20&lt;br /&gt;
	STA $16 ;Add power bomb drop opportunity&lt;br /&gt;
&lt;br /&gt;
$371DF ALTERNATE ENTRY POINT&lt;br /&gt;
BRANCH_KAPPA ;Choose item drop&lt;br /&gt;
&lt;br /&gt;
	LDY #$0000&lt;br /&gt;
&lt;br /&gt;
BRANCH_XI&lt;br /&gt;
&lt;br /&gt;
	SEP #$20&lt;br /&gt;
	LDA $12&lt;br /&gt;
&lt;br /&gt;
	BEQ BRANCH_LAMBDA ;If no chance to drop small energy, large energy, missiles, or nothing, go here.&lt;br /&gt;
&lt;br /&gt;
	LSR $16 ;Check the next drop opportunity bit&lt;br /&gt;
&lt;br /&gt;
	BCC BRANCH_MU ;If clear, skip that item.&lt;br /&gt;
&lt;br /&gt;
	LDA $14 ;Acumulative 'negative' drop chance of supers and power bombs. This acts basically as a X/256 multiplier for now&lt;br /&gt;
	STA $4202&lt;br /&gt;
	LDA $B40000, X ;Drop chance&lt;br /&gt;
	STA $4203&lt;br /&gt;
	PHY&lt;br /&gt;
	NOP&lt;br /&gt;
	NOP&lt;br /&gt;
	LDY $4216 ;Multiplier * drop chance&lt;br /&gt;
	STY $4204&lt;br /&gt;
	LDA $12 ;Cumulative drop chance of first four items (including no drop)&lt;br /&gt;
	STA $4206&lt;br /&gt;
	PLY&lt;br /&gt;
	NOP&lt;br /&gt;
	REP #$20&lt;br /&gt;
	LDA $18 ; Acumulated drop chance&lt;br /&gt;
	CLC&lt;br /&gt;
	ADC $4214 ;This is basically current drop chance * (acumulative first 4 drop chance / acumulative super and power drop chance)&lt;br /&gt;
	CMP $1A ; Compared to the drop chance quota.&lt;br /&gt;
&lt;br /&gt;
	BCS BRANCH_NU ;When the drop chance quota is met or exceeded, go here to set the drop&lt;br /&gt;
&lt;br /&gt;
	STA $18 ;Else update the cumulative drop chance&lt;br /&gt;
&lt;br /&gt;
BRANCH_MU&lt;br /&gt;
&lt;br /&gt;
	INX ;Go to next drop chance&lt;br /&gt;
	INY ;Go to next drop type&lt;br /&gt;
	CPY #$0004&lt;br /&gt;
&lt;br /&gt;
	BNE BRANCH_XI ;Loop back to choose item loop, unless&lt;br /&gt;
&lt;br /&gt;
	BRA BRANCH_OMICRON ;The first four items haven't triggered the drop, go on to supers and power bombs.&lt;br /&gt;
&lt;br /&gt;
BRANCH_LAMBDA&lt;br /&gt;
&lt;br /&gt;
	LDA $16&lt;br /&gt;
	LSR A&lt;br /&gt;
	LSR A&lt;br /&gt;
	LSR A&lt;br /&gt;
	LSR A&lt;br /&gt;
	STA $16 ;Skip first 4 drop opportunity bits&lt;br /&gt;
	INX&lt;br /&gt;
	INX&lt;br /&gt;
	INX&lt;br /&gt;
	INX ;Skip 4 drop chances&lt;br /&gt;
	LDY #$0004 ;Go straight to drop type 4 (supers)&lt;br /&gt;
&lt;br /&gt;
BRANCH_OMICRON ;Super and power bomb drop choice loop&lt;br /&gt;
&lt;br /&gt;
	SEP #$20&lt;br /&gt;
	LSR $16 ;Check the next drop opportunity bit&lt;br /&gt;
&lt;br /&gt;
	BCC BRANCH_PI ;If clear, skip that item.&lt;br /&gt;
&lt;br /&gt;
	REP #$20&lt;br /&gt;
	LDA $B40000, X ;Get drop chance&lt;br /&gt;
	AND #$00FF&lt;br /&gt;
	CLC&lt;br /&gt;
	ADC $18 ;Add to accumulated drop chance&lt;br /&gt;
	CMP $1A ;Compare to drop quota&lt;br /&gt;
&lt;br /&gt;
	BCS BRANCH_NU&lt;br /&gt;
&lt;br /&gt;
	STA $18 ;Update drop chance&lt;br /&gt;
&lt;br /&gt;
BRANCH_PI&lt;br /&gt;
&lt;br /&gt;
	INX ;Go to next drop chance&lt;br /&gt;
	INY ;Go to next drop type&lt;br /&gt;
	CPY #$0006&lt;br /&gt;
&lt;br /&gt;
	BNE BRANCH_OMICRON ;Loop back&lt;br /&gt;
&lt;br /&gt;
$3724D ALTERNATE ENTRY POINT&lt;br /&gt;
&lt;br /&gt;
	LDY #$0003 ;Drop nothing&lt;br /&gt;
&lt;br /&gt;
BRANCH_NU ;At this point, Y determines the drop. 0 = Small energy, 1 = Large, 2 = missiles, 3 = nothing, 4 = super, 5 = power bomb.&lt;br /&gt;
&lt;br /&gt;
	REP #$20&lt;br /&gt;
	TYX&lt;br /&gt;
	LDA $86F25E, X ;Translate chosen drop to some other index value.&lt;br /&gt;
	AND #$00FF ;1 byte&lt;br /&gt;
	PLB&lt;br /&gt;
	PLY&lt;br /&gt;
	PLX&lt;br /&gt;
	RTS&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kejardon</name></author>	</entry>

	</feed>