

;#add new cards? 006344C1

func clownpieceID_FIX
  mov dword ptr [esi+0x34C],0x00000017
  ;mov dword ptr [esi+0x34C],0x0000001E
  ;mov dword ptr [esi+0x34C],0x00000032
  cmp [esi+0x196],cx
end
0061DFF8 = clownpieceID_FIX

;# 5AAA invis ?? with 5AAAA as well. We might need to streamline invis functions
func clownpiece0
  mov word ptr [esi+0x892],0x00FF
end
00635B20 = clownpiece0

;# 5AAAA momentum
func clownpiece1
  fld dword ptr [0x85882C]
end
00630321 = clownpiece1

func clownpieceDASHJUMP
  fld dword ptr [0x858F40]
end
0061F63B = clownpieceDASHJUMP

;# 3A teleport
func clownpiece2_FLDZ
  fldz
end
func clownpiece2_FLD1
  fld1
end
0062159D = clownpiece2_FLDZ

;# 3A momentum
func clownpiece3
  fld dword ptr [0x85C230]
end
006214CD = clownpiece3

;# 3[A] invis
func clownpiece4
  mov dword ptr [esi+0x892],0x000000FF
  jmp 0x621582
end
00621574 = clownpiece4

;# 3[A] proc timing
func clownpiece5
  cmp dword ptr [esi+0x144],0x0F
end
00621500 = clownpiece5

;# 6A teleport
func clownpiece6_FLD15
  fld dword ptr [0x85B3B0]
end
00621087 = clownpiece6_FLD15

;# 6A momentum
00620F25 = clownpiece6_FLD15

;# 6A transparency 1
func clownpiece7
  mov word ptr [esi+0x892],0x00FF
  mov byte ptr [esi+0x113],0xFF
  jmp 0x62109D
end
0062108D = clownpiece7

;# 6A accel
func clownpiece8
  fsub qword ptr [0x8677C8]
end
00621120 = clownpiece8

;# 6A never skip loop
func clownpiece9
  cmp dword ptr [esi+0x190],0x0
  jmp 0x621176
end
00621155 = clownpiece9

;# 6A loop dur
func clownpiece10
  cmp dword ptr [esi+0x144],0x0E
end
0062114C = clownpiece10

;# 6[A] momentum
006210FC = clownpiece6_FLD15

;# 6[A] never skip loop
func clownpiece10A
  cmp dword ptr [esi+0x190],0x0
  jmp 0x6211F2
end
006211D4 = clownpiece10A

;# 6[A] loop dur
func clownpiece11
  cmp dword ptr [esi+0x144],0x0C
end
006211CB = clownpiece11

;# 6[A] decel on charge
func clownpiece12
  fsub qword ptr [0x8581B8]
end
00620F50 = clownpiece12

;# f5A momentum
func clownpiece13
  fld dword ptr [0x867860]
end
00620EB7 = clownpiece13

;# j6A momentum
func clownpiece14
  fld dword ptr [0x858830]
end
00621950 = clownpiece14

;# j6A startup momentum X
func clownpiece15
  mov byte ptr [esi+0x194],0x01
  jmp 0x632773
end
0063276A = clownpiece15

;# 66B invis
func clownpiece16
  mov byte ptr [esi+0x113],0xFF
  jmp 0x624EED
end
00624EDF = clownpiece16

;# 66B dur, check down there too for 66b
func clownpiece17
  cmp dword ptr [esi+0x144],0x08
end
;00624F0C = clownpiece17

;# 66C invis
func clownpiece18
  mov word ptr [esi+0x892],0x00FF
end
00628396 = clownpiece18

;# 66C never bounce
func clownpiece18A
  cmp dword ptr [esi+0x190],0x0
  jmp 0x6281E7
end
006281BA = clownpiece18A

;# 5C accel
func clownpiece19_NOP
  NOP
end
func clownpiece19_MULZERO
  fmul qword ptr [0x86812C]
end
006369B8 = clownpiece19_NOP

;# 5C dur
func clownpiece20
  cmp dword ptr [esi+0x144],0x78
end
00636A94 = clownpiece20

;# 5[C] accel
00636F68 = clownpiece19_NOP

;# 5[C] dur
00637044 = clownpiece20

func clownpiece21_Cspd
  fld dword ptr [0x871538]
end
;# 5c base spd
0062519F = clownpiece21_Cspd
;# 5[C] base spd
00625564 = clownpiece21_Cspd
;# 6C base spd
00625B2A = clownpiece21_Cspd
;# 6[C] base spd
00625EEF = clownpiece21_Cspd
;# jC base spd
00626693 = clownpiece21_Cspd
;# j[C] base spd
00626A4C = clownpiece21_Cspd
;# j2C base spd
0062799C = clownpiece21_Cspd
;# j2[C] base spd
00627D4C = clownpiece21_Cspd

;# 5B decel
func clownpiece22
  fsub dword ptr [0x85AE94]
end
006363DB = clownpiece22

;# 5B minspd
func clownpiece23_FLD12
  fld dword ptr [0x858830]
end
006363EC = clownpiece23_FLD12

func clownpiece5B_NEW0
  ;fld dword ptr [0x8589F0]
  mov word ptr [esi+0x7D2],0x02
end

func clownpiece5B_NEW1
  mov eax,[esi+0x170]
  movsx edx,byte ptr [esi+0x104]
end

func clownpiece5B_NEW1B
  mov eax,[esi+0x170]
  movsx ecx,byte ptr [esi+0x104]
end

func clownpiece5B_RNG0_OLD
  push 0x11
  call 0x4099F0
end

func clownpiece5B_RNG0
  push 0x11
  call 0x4099F0
  
  cmp word ptr [esi+0x7D2],0x00
  je short LABEL1
  cmp word ptr [esi+0x7D2],0x01
  je short LABEL2
  cmp word ptr [esi+0x7D2],0x02
  je short LABEL3
  jmp LABEL4
  LABEL1:
  mov eax,0x00000001
  jmp short LABEL5
  LABEL2:
  mov eax,0x00000002
  jmp short LABEL5
  LABEL3:
  mov eax,0x00000003
  jmp short LABEL5
  LABEL4:
  mov eax,0x00000004
  LABEL5:
  mov edx,0x00000004
  imul edx
  mov edx,eax
end

func clownpiece5B_2B
  push 0x11
  call 0x4099F0
  
  cmp word ptr [esi+0x7D2],0x00
  je short LABEL1
  cmp word ptr [esi+0x7D2],0x01
  je short LABEL2
  cmp word ptr [esi+0x7D2],0x02
  je short LABEL3
  jmp LABEL4
  LABEL1:
  mov eax,0x00000001
  jmp short LABEL5
  LABEL2:
  mov eax,0x00000002
  jmp short LABEL5
  LABEL3:
  mov eax,0x00000003
  jmp short LABEL5
  LABEL4:
  mov eax,0x00000004
  LABEL5:
  mov edx,0x00000004
  imul edx
  mov edx,eax
  
  
  add esp,0x04
  test eax,eax
end

func clownpiece5B_RNG1
  fsub dword ptr [0x86782C]
end

func clownpieceC5B_3
  jmp 0x63120A
end
func clownpieceC5B_3B
  jmp 0x624D6A
end

;#46EB30 is 7 fpu stack

func clownpiece5B_NEW2_A
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x622383
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x6221E2
end

func clownpiece5B_NEW2_B
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x62272A
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x6225F7
end

func clownpiece5B_NEW2_C
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x622BE9
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x622AAC
end

func clownpiece5B_NEW2_D
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x622FF0
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x622EBF
end

func clownpiece5B_NEW2_E
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x623413
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x623374
end

func clownpiece5B_NEW2_F
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x623780
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x6236EA
end

func clownpiece5B_NEW2_G
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x623CD1
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x623B92
end

func clownpiece5B_NEW2_H
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x624105
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x623FC6
end

func clownpiece5B_NEW2_I
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x62469C
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x62454F
end

func clownpiece5B_NEW2_J
  push 0x00000320
  call 0x46EB30
  pushf
  pushad
  cmp word ptr [esi+0x7D2],0x00
  jg short LABEL1
  popad
  popf
  jmp 0x624AEA
  LABEL1:
  mov ax,[esi+0x7D2]
  sub ax,0x01
  mov [esi+0x7D2],ax
  popad
  popf
  jmp 0x62499D
end



;#5b
006221DC = clownpiece5B_NEW0
006221E2 = clownpiece5B_NEW1
00622379 = clownpiece5B_NEW2_A
00622275 = clownpiece5B_RNG0
00622291 = clownpiece5B_RNG1
;#5[b]
006225C9 = clownpieceC5B_3
006225F1 = clownpiece5B_NEW0
006225F7 = clownpiece5B_NEW1B
00622720 = clownpiece5B_NEW2_B
0062268A = clownpiece5B_RNG0
006226A6 = clownpiece5B_RNG1
;#6b
00622AA6 = clownpiece5B_NEW0
00622AAC = clownpiece5B_NEW1B
00622BDF = clownpiece5B_NEW2_C
00622B3D = clownpiece5B_RNG0
00622B59 = clownpiece5B_RNG1
;#6[b]
00622E91 = clownpieceC5B_3
00622EB9 = clownpiece5B_NEW0
00622EBF = clownpiece5B_NEW1B
00622FE6 = clownpiece5B_NEW2_D
00622F50 = clownpiece5B_RNG0
00622F6C = clownpiece5B_RNG1
;#2b
0062336D = clownpiece5B_NEW0
00623374 = clownpiece5B_2B
00623409 = clownpiece5B_NEW2_E
00623389 = clownpiece5B_RNG1
;#2[b]
006236BB = clownpieceC5B_3
006236E3 = clownpiece5B_NEW0
006236EA = clownpiece5B_2B
00623776 = clownpiece5B_NEW2_F
006236FF = clownpiece5B_RNG1
;#jb
00623B8C = clownpiece5B_NEW0
00623B92 = clownpiece5B_NEW1
00623CC7 = clownpiece5B_NEW2_G
00623C25 = clownpiece5B_RNG0
00623C41 = clownpiece5B_RNG1
;#j[b]
00623F98 = clownpieceC5B_3B
00623FC0 = clownpiece5B_NEW0
00623FC6 = clownpiece5B_NEW1B
006240FB = clownpiece5B_NEW2_H
00624059 = clownpiece5B_RNG0
00624075 = clownpiece5B_RNG1
;#j2b
00624549 = clownpiece5B_NEW0
0062454F = clownpiece5B_NEW1
00624692 = clownpiece5B_NEW2_I
006245E4 = clownpiece5B_RNG0
00624600 = clownpiece5B_RNG1
;#j2[b]
0062496F = clownpieceC5B_3B
00624997 = clownpiece5B_NEW0
0062499D = clownpiece5B_NEW1B
00624AE0 = clownpiece5B_NEW2_J
00624A32 = clownpiece5B_RNG0
00624A4E = clownpiece5B_RNG1

;# isn't this bullet hp?
func clownpiece5B_GRAZERES
  push 0x01
  mov ecx,esi
  call 0x48CE30
end
00636477 = clownpiece5B_GRAZERES: 9

func clownpiece24A
  cmp ax,0x00F7
  jne 0x622596
  jmp 0x6221C2
end
func clownpiece24B
  cmp ax,0x00F7
  jne 0x622E5E
  jmp 0x622A8C
end
func clownpiece24C
  cmp ax,0x00F7
  jne 0x623688
  jmp 0x623353
end
func clownpiece24D
  cmp ax,0x00F7
  jne 0x623F45
end
func clownpiece25
  jmp 0x62491C
end

;# 5B 3rd bullet
006221B8 = clownpiece24A
;# 6B 3rd bullet
00622A82 = clownpiece24B
;# 2B 3rd bullet
00623349 = clownpiece24C
;# jB 3rd bullet
00623B68 = clownpiece24D
;# j2B 3rd bullet
00624529 = clownpiece25
;# j2B charge frame
;#0062448F

func clownpiece26_Bframe
  cmp word ptr [esi+0x140],0x02
end
func clownpiece26_Bframe1
  cmp word ptr [esi+0x140],0x03
end
;# 5[B] frame
0062212A = clownpiece26_Bframe
;# 6[B] frame
006229F1 = clownpiece26_Bframe
;# 2[B] frame
006232BE = clownpiece26_Bframe
;# j[B] frame
00623AD7 = clownpiece26_Bframe
;# j2[B] frame (4, unlike the others at 3)
0062448F = clownpiece26_Bframe1


;#d236 accel
0063777B = clownpiece19_NOP
;#d236 rotation speed
006375E5 = clownpiece2_FLDZ
;#d236 duration
;#006377E2
;#d236 this is the actual rotation fix
func clownpiece27
  fld dword ptr [0x85BAB8]
end
006375D6 = clownpiece27

;# a236 mind bend duration
func clownpiece28
  cmp dword ptr [esi+0x144],0x78
end
006380E7 = clownpiece28

;# a236 mind bend decel
func clownpiece29
  fsub qword ptr [0x857990]
end
00637F6A = clownpiece29

func clownpieceA236DROP_COUNT
  fld dword ptr [0x85C004]
end

;# a236 mind bend min spd
00637F7B = clownpiece2_FLDZ
;# a236 mind drop split count
00638D31 = clownpieceA236DROP_COUNT
;# a236 mind drop split angle
00638DBC = clownpiece19_NOP
;# a236 mind drop split accel
00638F61 = clownpiece19_MULZERO
;# I don't get it.
00638DAC = clownpiece19_MULZERO

;# d214c rotation speed
func clownpiece30
  fld dword ptr [0x867860]
end
0062983A = clownpiece30

;# d214c rotation start angle
func clownpiece31
  fld qword ptr [0x85BAC0]
end
0062982D = clownpiece31

;# d22 deceleration speed
func clownpiece32
  fsub dword ptr [0x85AE94]
end
0063AF04 = clownpiece32

;# d22 minimum speed
func clownpiece33
  fld dword ptr [0x85C610]
end
0063AF15 = clownpiece33

;# d623 B C size equalize
func clownpiece34
  fld dword ptr [0x85ABE4]
end
0062BD75 = clownpiece34

;# d623 no effect
0063A3FA = clownpiece19_MULZERO

func clownpieceD236_SKIP
  jmp 0x637B0F
end
func clownpieceD623_0
  pushf
  pushad
  cmp dword ptr [esi+0x144],0x00000000
  nop
  jne short LABEL1
  mov dword ptr [esi+0x190],0x00000000
  mov byte ptr [esi+0x194],0x01
  nop
  LABEL1:
  ; WHAT ? 398 364 mov eax,[esi+0x364]
  
  mov eax,[esi+0x398]
  movzx eax, word ptr [eax+0x13C]
  cmp ax,0x0031
  jle short LABEL2
  cmp ax,0x0096
  jl short LABEL3
  
  LABEL2:
  cmp byte ptr [esi+0x194],0x00
  jne short LABEL4
  cmp dword ptr [esi+0x190],0x08
  jne short LABEL3
  LABEL3:
  mov byte ptr [esi+0x194],0x00
  nop
  mov dword ptr [esi+0x110],0x55555555
  LABEL4:
  mov dword ptr [esi+0x190],0x00000000
  fld dword ptr [esi+0x11C]
  popad
  popf
end
;# LABEL3 its supposed to be mov byte 194 to 1, to recover hit counts after same density battle. but its not used now, and its incomplete
006379E0 = clownpieceD236_SKIP
;# next time do we check 190 = 0 in 142 = 0 ?

;# insert here (820,3)
0063A4FC = clownpieceD623_0

;# grid delay
func clownpieceD623_1
  mov ecx,0x00000010
end
0063A432 = clownpieceD623_1

;# d623b level multiplier and base
func clownpieceD623B_LV
  fmul dword ptr [0x859F00]
  fld dword ptr [0x85B984]
end
0062BC3F = clownpieceD623B_LV: 12

;# d623c level multiplier
func clownpieceD623C_LV
  fmul dword ptr [0x859F00]
end
0062BD9E = clownpieceD623C_LV

;# d623 stacking
;#00637AEA = 
func clownpieceD623_STACK
  pushf
  pushad
  cmp dword ptr [esi+0x13C],0x00010334
  je short LABEL1
  LABEL4:
  jmp short LABEL2
  LABEL1:
  mov eax,[esi+0x398]
  cmp dword ptr [eax+0x13C],0x0000021C
  je short LABEL3
  cmp dword ptr [eax+0x13C],0x0000021D
  jne short LABEL4
  LABEL3:
  cmp dword ptr [eax+0x142],0x00000000
  nop
  jne short LABEL4
  mov dword ptr [esi+0x144],0x000000FF
  jmp short LABEL4
  nop
  LABEL2:
  popad
  popf
  mov ebx,0x00000003
end
0063A390 = clownpieceD623_STACK
;#0063A57F


;# bullet hit disappear effect and regeneration
func clownpieceMECH
  pushf
  pushad
  mov eax,[esi+0x398]
  test eax,eax
  je short LABELA
  mov edx,[eax+0x170]
  test edx,edx
  je short LABELA
  cmp word ptr [eax+0x184],0x00
  jle short LABELB
  cmp word ptr [edx+0x184],0x00
  jg short LABELA
  LABELB:
  mov dword ptr [esi+0x190],0x00000001
  mov byte ptr [esi+0x194],0x00
  LABELA:
  popad
  popf
  nop
  nop
  nop
  cmp dword ptr [esi+0x144],0x28
  jne short LABEL1
  cmp dword ptr [esi+0x110],0xFFFFFFFF
  jne short LABEL1
  mov byte ptr [esi+0x194],0x01
  nop
  mov dword ptr [esi+0x190],0x00000000
  LABEL1:
  cmp dword ptr [esi+0x190],0x04
  je short LABEL2
  cmp dword ptr [esi+0x190],0x08
  jne short LABEL3
  LABEL2:
  jmp short EXIT
  LABEL3:
  cmp dword ptr [esi+0x190],0x00
  je short LABEL4
  sub dword ptr [esi+0x110],0x11111111
  LABEL4:
  cmp dword ptr [esi+0x110],0x00000000
  je short LABEL5
  cmp eax,eax
  jmp short LABEL6
  LABEL5:
  cmp dword ptr [esi+0x110],0xFFFFFFDD
  LABEL6:
  jmp short EXIT
  EXIT:
  nop
end

func clownpieceMECH2
  pushad
  pushf
  push ebx
  mov ecx,esi
  call 0x48CDE0
  popf
  popad
  nop
  pushf
  pushad
  mov eax,[esi+0x398]
  test eax,eax
  je short LABELA
  mov edx,[eax+0x170]
  test edx,edx
  je short LABELA
  cmp word ptr [eax+0x184],0x00
  jle short LABELB
  cmp word ptr [edx+0x184],0x00
  jg short LABELA
  LABELB:
  mov dword ptr [esi+0x190],0x00000001
  mov byte ptr [esi+0x194],0x00
  LABELA:  
  popad
  popf
  nop
  nop
  nop
  cmp dword ptr [esi+0x144],0x28
  jne short LABEL1
  cmp dword ptr [esi+0x110],0xFFFFFFFF
  jne short LABEL1
  mov byte ptr [esi+0x194],0x01
  nop
  mov dword ptr [esi+0x190],0x00000000
  LABEL1:
  cmp dword ptr [esi+0x190],0x04
  je short LABEL2
  cmp dword ptr [esi+0x190],0x08
  jne short LABEL3
  LABEL2:
  jmp EXIT
  LABEL3:
  cmp dword ptr [esi+0x190],0x00
  je short LABEL4
  sub dword ptr [esi+0x110],0x11111111
  LABEL4:
  cmp dword ptr [esi+0x110],0x00000000
  je short LABEL5
  cmp eax,eax
  jmp short LABEL6
  LABEL5:
  cmp dword ptr [esi+0x110],0xFFFFFFDD
  LABEL6:
  jmp short EXIT
  EXIT:
  nop
end
;#5c
00636A88 = clownpieceMECH
;#5[c]
00637038 = clownpieceMECH
;#d236
006377DA = clownpieceMECH
;#a236
006380F0 = clownpieceMECH
;#a236 drop
;#00638FB4
00638FB4 = clownpieceMECH2




;# 5c 2nd phase code area
func clownpiece5C_SKIP
  jmp 0x636EE4
end
func clownpiece5C_SKIP2
  jne 0x636CA9
end
00636B1F = clownpiece5C_SKIP
00636B19 = clownpiece5C_SKIP2


;# a214 scan
;# lvl +6A9h
;# b
func clownpieceA214
  pushf
  pushad
  mov byte ptr [esi+0x18C],0x05
  cmp word ptr [esi+0x13C],0x020E
  jl short LABEL1
  mov ebx,0x00090000
  jmp short LABEL2
  LABEL1:
  mov ebx,0x000B0000
  LABEL2:
  cmp dword ptr [esi+0x13E],ebx
  je short LABEL3
  cmp dword ptr [esi+0x13E],0x00030001
  je short LABEL3
  cmp dword ptr [esi+0x13E],0x00070001
  jne short LABEL4
  LABEL3:
  cmp word ptr [esi+0x142],0x0000
  jne short LABEL4
  mov byte ptr [esi+0x194],0x01
  mov dword ptr [esi+0x190],0x00000000
  LABEL4:
  popad
  popf
  fldpi
  fmul st0,st0
  fstp dword ptr [esi+0xF4]
end
0062994F = clownpieceA214: 18
;# max dur
func clownpieceA214_MAXDUR
  pushad
  pushf
  movzx edx,byte ptr [esi+0x6A9]
  add dx,0x03
  imul dx,dx,0x0C
  popf
  cmp word ptr [esi+0x144],dx
  popad
end
00629AC4 = clownpieceA214_MAXDUR: 10
;# 816,1
func clownpieceSKIP_1
  jmp 0x639959
end
00639899 = clownpieceSKIP_1
;# y
func clownpieceA214_Y
  fstp dword ptr [esi+0x11C]
  add esp,0x04
  nop
  pushf
  pushad
  fld dword ptr [esi+0x12C]
  fadd dword ptr [0x86782C]
  fstp dword ptr [esi+0x12C]
  mov eax,[esi+0x398]
  fld dword ptr [eax+0xF0]
  fsub dword ptr [0x85BB84]
  fstp dword ptr [esi+0xF0]
  popad
  popf
  fld1
  nop
  fstp dword ptr [esi+0x11C]
  jmp 0x63987F
end
0063986A = clownpieceA214_Y
;# c
00629F05 = clownpieceA214: 18
;# max dur
0062A076 = clownpieceA214_MAXDUR: 10

;# air b
0062A49A = clownpieceA214: 18
;# max dur
0062A654 = clownpieceA214_MAXDUR: 10

;# air c
0062AAB9 = clownpieceA214: 18
;# max dur
0062AC4D = clownpieceA214_MAXDUR: 10


;# let's make rotation
;# disable original rotation
func clownpieceA214_ROTDISABLE
  fld dword ptr [esi+0x12C]
end
006397B9 = clownpieceA214_ROTDISABLE: 13
;# turn x offset to 0
func clownpieceA214_OFFSET
  fldz
  fadd dword ptr [ecx+0xEC]
end
006397ED = clownpieceA214_OFFSET: 10
;# turn x offset to 0 for air vers
0063982E = clownpieceA214_OFFSET: 10



;#j6C spd
func clownpiece100
  fld dword ptr [0x871538]
end
00627021 = clownpiece100
;#j6[C] spd
006273DA = clownpiece100


;#5[c] angle split
func clownpiece101
  fmul qword ptr [0x858990]
end
006255AD = clownpiece101
;#5[C] counter
0062561C = clownpiece100
;#6[C] angle split
00625F38 = clownpiece101
00625FA7 = clownpiece100
;#j5[C]
00626A95 = clownpiece101
00626B04 = clownpiece100
;#j6[C]
0062741A = clownpiece101
00627486 = clownpiece100
;#j2[C]
00627D8F = clownpiece101
00627DF8 = clownpiece100


;#tech x
func clownpiece102
  fld dword ptr [0x85AE94]
end
0061E712 = clownpiece102

;#tech y
func clownpiece103
  fld dword ptr [0x871538]
end
0061E706 = clownpiece103

;#backtech x
func clownpiece104
  fld dword ptr [0x85B9E0]
end
0061E889 = clownpiece104

;#backtech y
0061E87D = clownpiece103


;#a236 drop angle b
00629273 = clownpiece2_FLDZ: 6
;#a236 drop angle c
00629429 = clownpiece2_FLDZ: 6
;#a236 hit effect
func clownpiece105
  fld dword ptr [0x871538]
end
00639056 = clownpiece105


;#d214 sound
func clownpieceD214
  pushf
  pushad
  cmp word ptr [esi+0x140],0x0014
  jne short LABEL1
  push 0x06
  mov ecx,[esi+0x398]
  call 0x464980
  LABEL1:
  popad
  popf
  movsx ecx,byte ptr [esi+0x104]
end
;#startup b
;#00629632
;#startup c
;#00629803
;#b ver
006394AC = clownpieceD214: 7
;#c ver
006394EF = clownpieceD214: 7
;#c ver equalize
func clownpieceD214_EQ
  fadd qword ptr [0x85BBC8]
end
00639517 = clownpieceD214_EQ

;# 3sc starmine
;# bullet
;# freeze x
;#0063CA69
;# freeze y
;#0063CA89
;# x+y and call
func clownpiece3SCSTAR
  pushf
  pushad
  
  ;# lets not fix it because theres those things like subsun bug..
  
  
  
  mov eax,[esi+0x144]
  xor edx,edx
  mov ebx,0x00000005
  div ebx
  cmp edx,0x00
  jne short LABEL1
  mov dword ptr [esi+0x190],0x00000000
  mov byte ptr [esi+0x194],0x01
  LABEL1:
  cmp dword ptr [esi+0x144],0x00
  jne short LABEL2
  mov ecx,[esi+0x398]
  push 0x05
  call 0x464980
  LABEL2:
  popad
  popf
  fldz
end
;# its probably not a standard hitcount reset mechanic.
0063CA69 = clownpiece3SCSTAR: 6
0063CA89 = clownpiece2_FLDZ
;# sound
;#0063CAC2

;# grounded
;# x
func clownpiece106
  fadd dword ptr [0x8575A4]
end
0062E37B = clownpiece106

;# y
0062E337 = clownpiece2_FLDZ: 6

;# division
func clownpiece107
  fmul dword ptr [0x857DD4]
end
0062E2DB = clownpiece107

;# idk
func clownpiece108
  push 0x00000351
end
0062E480 = clownpiece108

;# idk 2
0062E572 = clownpiece108

;# dur?
func clownpiece109
  fld dword ptr [0x8575A8]
end
0062E30A = clownpiece109

;# air
;# x
0062FC0A = clownpiece106
;# y
0062FBC6 = clownpiece2_FLDZ: 6
;# division
;#0062FC58
;# division
0062FB6A = clownpiece107
;# idk
0062FD0F = clownpiece108
;# idk 2
0062FE01 = clownpiece108
;# dur?
0062FB99 = clownpiece109


;# redirecting 5c subseqs
;#destination 006370AD
func clownpiece200
  cmp word ptr [esi+0x13E],0x02
  jl 0x636EF3
  cmp word ptr [esi+0x13E],0x06
  jg 0x636EF3
  jmp 0x636EE4
end
00636CA9 = clownpiece200

;#00636EF3

;# j2A x
func clownpiece201
  fstp dword ptr [esi+0xF8]
  fld dword ptr [0x85BC44]
  fstp dword ptr [esi+0xF4]
end
0063282E = clownpiece201: 6
;# insert here

;# 1sc crush card
;# inserts
func clownpiece1SCCRUSH
  pushf
  pushad
  mov ebx,[esi+0x140]
  cmp bl,0x10
  jl short LABEL1
  cmp bl,0x24
  jg short LABEL1
  cmp bl,0x10
  jne short LABEL2
  fld dword ptr [0x859F00]
  fstp dword ptr [esi+0xF4]
  LABEL2:
  fld dword ptr [esi+0xF4]
  fsub dword ptr [0x85CB14]
  fstp dword ptr [esi+0xF4]
  cmp bl,0x10
  je short LABEL3
  cmp bl,0x14
  je short LABEL3
  cmp bl,0x18
  je short LABEL3
  cmp bl,0x1C
  je short LABEL3
  cmp bl,0x20
  je short LABEL3
  cmp bl,0x24
  je short LABEL3
  jne short LABEL4
  LABEL3:
  mov byte ptr [esi+0x194],0x01
  mov dword ptr [esi+0x190],0x00000000
  LABEL4:
  jmp short LABEL5
  LABEL1:
  fldz
  fstp dword ptr [esi+0xF4]
  LABEL5:
  popad
  popf
  cmp word ptr [esi+0x142],0x00
end
0062EBCB = clownpiece1SCCRUSH
;# change flash frame
func clownpiece1SCCRUSH_FLASH
  cmp word ptr [esi+0x140],0x04
end
0062EBD9 = clownpiece1SCCRUSH_FLASH: 8
;# change ball start frame
func clownpiece1SCCRUSH_START
  cmp word ptr [esi+0x140],0x01
end
0062EC6B = clownpiece1SCCRUSH_START: 8
;# y
func clownpiece1SCCRUSH_Y
  fadd dword ptr [0x85BDC4]
end
0062ECB2 = clownpiece1SCCRUSH_Y: 6

;# x follow insert
func clownpiece1SCCRUSH_2
  pushad
  mov ebx,[esi+0x398]
  fld dword ptr [ebx+0xEC]
  fstp dword ptr [esi+0xEC]
  popad
  pushad
  mov ebx,[esi+0x398]
  mov eax,[ebx+0x13C]
  cmp ax,0x025E
  jne short LABEL1
  mov eax,[ebx+0x140]
  cmp ax,0x0028
  jnl short LABEL1
  mov ebx,[ebx+0x196]
  mov dword ptr [esi+0x196],ebx
  jmp short LABEL2
  LABEL1:
  mov eax,[esi+0x140]
  cmp ax,0x00FF
  jnl short LABEL2
  mov word ptr [esi+0x140],0x00FF
  LABEL2:
  popad
end
;# follow and duration here
0063D54B = clownpiece1SCCRUSH_2: 18
;# 2 frame periods
func clownpiece1SCCRUSH_DELAY
  push 0x00000168
end
0063D536 = clownpiece1SCCRUSH_DELAY: 7

;# STILL need to align with hitstops
;# by fixing duration

;# 2sc field
;# unlock particle duration
0063F075 = clownpiece19_NOP: 6
;# actual spell duration
func clownpiece2SCFIELD_DUR
  mov word ptr [esi+0x8B2],0x0000
end
0062F758 = clownpiece2SCFIELD_DUR: 9
;# size changes
;# transp
;#0063F0E5 = 
func clownpiece2SCFIELD_1
  lea ecx,[eax+eax]
end
0063F0CF = clownpiece2SCFIELD_1: 5
;# size and insert
func clownpiece2SCFIELD_2
  pushf
  pushad
  cmp dword ptr [esi+0x144],0x00000000
  nop
  jne short LABEL1
  mov dword ptr [esi+0x190],0x00000000
  mov byte ptr [esi+0x194],0x01
  nop
  LABEL1:
  ; WHAT 398 364 mov eax,[esi+0x364]
  mov eax,[esi+0x398]
  movzx eax, word ptr [eax+0x13C]
  cmp ax,0x0031
  jle short LABEL2
  cmp ax,0x0096
  jl short LABEL3
  LABEL2:
  cmp byte ptr [esi+0x194],0x00
  jne short LABEL4
  cmp dword ptr [esi+0x190],0x08
  jne short LABEL3
  LABEL3:
  mov byte ptr [esi+0x194],0x00
  nop
  mov dword ptr [esi+0x110],0x55555555
  LABEL4:
  mov dword ptr [esi+0x190],0x00000000
  fld dword ptr [esi+0x11C]
  popad
  popf
  fld1
end
;# almost same as func clownpieceD623_0
0063F0A9 = clownpiece2SCFIELD_2: 12
;# it calls to 820
;#0063A569
;#this affects duration for 623 as well.
func clownpiece2SCD623_DUR
  cmp eax,0x21C
end
0063A574 = clownpiece2SCD623_DUR


;#d22
;#transp start
;#0063AC38 =
;#height b
;#0063B5FE = 
;#creation start?
func clownpieceD22B
  ;fld dword ptr [0x867860]
  sub esp,0x40
  call LABEL1
  ;fsub dword ptr [0x867828]
  call LABEL1
  ;fsub dword ptr [0x867828]
  call LABEL1
  ;fsub dword ptr [0x867828]
  call LABEL1
  add esp,0x40
  pushf
  ;fcomp dword ptr [0x867860]
  popf
  jmp 0x63B6BB
  LABEL1:
  fldz
  push 0x1E
  fstp dword ptr [esi+0x380]
  jmp 0x63B58F
end
0063B585 = clownpieceD22B: 10
;#creation end
func clownpieceD22_1
  push 0x00000320
  call edx
  ret
end
0063B6B4 = clownpieceD22_1: 7

;#00636D3F this is angle width, but it's on the above insert



func clownpieceD22_RNG0
  call 0x4099F0
  
  fld dword ptr [0x867828]
  fcomp
  fnstsw ax
  test ah,0x41
  je short LABEL1
  fld dword ptr [0x8589F0]
  fcomp
  fnstsw ax
  test ah,0x41
  je short LABEL2
  fld dword ptr [0x871538]
  fcomp
  fnstsw ax
  test ah,0x41
  je short LABEL3
  fld dword ptr [0x867860]
  fcomp
  fnstsw ax
  test ah,0x41
  je short LABEL4
  jmp LABEL5
  LABEL1:
  mov eax,0x00000001
  jmp short LABEL6
  LABEL2:
  mov eax,0x00000002
  jmp short LABEL6
  LABEL3:
  mov eax,0x00000003
  jmp short LABEL6
  LABEL4:
  mov eax,0x00000004
  jmp short LABEL6
  LABEL5:
  mov eax,0x00000005
  LABEL6:
  mov edx,0x00000008
  imul edx
  mov edx,eax
end
;0063B58F = clownpieceD22_RNG0

;#angle2
func clownpieceD22_2
  fsub dword ptr [0x858830]
end
0063B5A9 = clownpieceD22_2

;#b position
func clownpieceD22_3
  cmp byte ptr [esi+0x104],0xFF
  je short LABEL1
  fldz
  jne short LABEL2
  LABEL1:
  fld dword ptr [0x85B8F4]
  LABEL2:
  nop
end
0063B62F = clownpieceD22_3: 10

;#c ver
;#creation start
func clownpieceD22C
  ;fld dword ptr [0x867860]
  sub esp,0x40
  call LABEL1
  ;fsub dword ptr [0x867828]
  call LABEL1
  ;fsub dword ptr [0x867828]
  call LABEL1
  ;fsub dword ptr [0x867828]
  call LABEL1
  add esp,0x40
  pushf
  ;fcomp dword ptr [0x867860]
  popf
  jmp  0x63B8B0
  LABEL1:
  fldz
  push 0x1E
  fstp dword ptr [esi+0x380]
  jmp 0x63B77F
end
0063B771 = clownpieceD22C: 14
;#creation end 0063B8B0
func clownpieceD22C_1
  push 0x00000320
  call edx
  mov ecx,0x00000004
  ret
end
0063B8A4 = clownpieceD22C_1: 12

;0063B77F = clownpieceD22_RNG0

;#c position
0063B81F = clownpieceD22_3: 10

;#b stick to ground
func clownpieceD22_NOJUMP
  jmp 0x62C538
end
0062C4EB = clownpieceD22_NOJUMP: 6
;#c transparency
0062C633 = clownpiece19_NOP: 7
;#spirit regen b
func clownpieceD22_SPIRIT
  push 0x78
  push 0x000000C8
  mov ecx,esi
  call 0x47A9E0
  push 0x32
  mov ecx,esi
  call 0x487870
  jmp 0x62C554
end
0062C538 = clownpieceD22_SPIRIT

;#d623 size stuff
;#0063A502


;#a623 clone
;#b size
;#0062BEDF
;#c size
;#0062C040
;#a623 no effect
0063A6CA = clownpiece19_MULZERO
;#insert
0063A7CC = clownpieceD623_0
;#b level mult
func clownpieceA623CLONE_0
  fld dword ptr [0x85ABE4]
  fstp dword ptr [esp+0x4E4]
  fmul dword ptr [0x859F00]
  fadd qword ptr [0x858EF0]
  fstp dword ptr [esp+0x4E8]
end
func clownpieceA623CLONE_1
  fld dword ptr [0x85ABE4]
  fstp dword ptr [esp+0x454]
  fmul dword ptr [0x859F00]
  fadd qword ptr [0x858EF0]
  fstp dword ptr [esp+0x458]
end
0062BEDF = clownpieceA623CLONE_0: 32
;#c level mult
0062C040 = clownpieceA623CLONE_1: 32
;#grid delay
func clownpieceA623CLONE_2
  mov ecx,0x00000010
end

0063A702 = clownpieceA623CLONE_2

;#stacking
func clownpieceA623_STACK
  pushf
  pushad
  cmp dword ptr [esi+0x13C],0x00010335
  je short LABEL1
  LABEL4:
  jmp short LABEL2
  LABEL1:
  mov eax,[esi+0x398]
  cmp dword ptr [eax+0x13C],0x00000221
  je short LABEL3
  cmp dword ptr [eax+0x13C],0x00000222
  jne short LABEL4
  LABEL3:
  cmp dword ptr [eax+0x142],0x00000000
  nop
  jne short LABEL4
  mov dword ptr [esi+0x144],0x000000FF
  jmp short LABEL4
  nop
  LABEL2:
  popad
  popf
  mov ebx,0x00000003
end
0063A660 = clownpieceA623_STACK

;#4sc laser
;#angle
func clownpiece4SCBEAM_ANGLE
  fld dword ptr [0x85B990]
end
0062E969 = clownpiece4SCBEAM_ANGLE

func clownpiece4SCBEAM
  pushf
  cmp byte ptr [esi+0x104],0xFF
  jne short LABEL1
  fsub dword ptr [0x85D648]
  jmp short LABEL2
  LABEL1:
  fadd dword ptr [0x85D648]
  LABEL2:
  popf
  fstp dword ptr [esi+0xEC]
  fld dword ptr [eax+0xF0]
end
0063D36D = clownpiece4SCBEAM: 18
;#first time using directions
;#sound
func clownpiece4SCBEAM_SOUND
  pushf
  pushad
  cmp dword ptr [esi+0x144],0x0000004A
  jg short LABEL1
  cmp dword ptr [esi+0x144],0x00000014
  jl short LABEL1
  cmp word ptr [esi+0x142],0x0000
  jne short LABEL1
  push 0x05
  mov ecx,[esi+0x398]
  call 0x464980
  LABEL1:
  popad
  popf
  movsx edx,byte ptr[esi+0x104]
end
0063D355 = clownpiece4SCBEAM_SOUND: 7


;#lre
func clownpiece5SCLRE_0
  fadd qword ptr [0x85C028]
end

func clownpiece5SCLRE_1
  mov al,[esi+0x113]
  cmp al,0x0A
end
func clownpiece5SCLRE_2
  sub al,0x0A
  mov [esi+0x113],al
end
func clownpiece5SCLRE_3
  cmp word ptr [esi+0x140],0x00
end

0063D40C = clownpiece5SCLRE_0: 6
0063D430 = clownpiece5SCLRE_1: 8
0063D43E = clownpiece5SCLRE_2: 8
0063D426 = clownpiece5SCLRE_3: 8

func clownpiece5SCLRE
  pushf
  pushad
  mov ecx,[esi+0x170]
  cmp dword ptr [ecx+0x754],0x00000000
  jne short LABEL1
  cmp dword ptr [ecx+0x774],0x00000000
  jne short LABEL1
  cmp dword ptr [ecx+0x758],0x00000000
  je short LABEL4
  jl short LABEL6
  jg short LABEL5
  LABEL4:
  cmp dword ptr [ecx+0x778],0x00000000
  je short LABEL3
  jl short LABEL6
  jg short LABEL5
  jmp short LABEL3
  LABEL1:
  mov word ptr [esi+0x140],0x0000
  jmp short LABEL2
  LABEL5:
  mov word ptr [esi+0x140],0x0001
  jmp short LABEL2
  LABEL6:
  mov word ptr [esi+0x140],0x0002
  LABEL2:
  mov word ptr [esi+0x142],0x00C7
  LABEL3:
  popad 
  popf
  
  pushf
  pushad
  mov eax,[esi+0x398]
  test eax,eax
  je short LABELA
  mov edx,[eax+0x170]
  test edx,edx
  je short LABELA
  cmp word ptr [eax+0x184],0x00
  jle short LABELB
  cmp word ptr [edx+0x184],0x00
  jg short LABELA
  LABELB:
  mov dword ptr [esi+0x190],0x00000001
  mov byte ptr [esi+0x194],0x00
  LABELA:
  popad
  popf
  mov edi,0x00000001
end
0063D3F4 = clownpiece5SCLRE

;#d22b bugfix
func clownpieceD22_FIX
  cmp dword ptr [esi+0x144],0x00000000
  jne 0x62C40D
  mov dword ptr [esi+0x190],0x00000001
  jmp 0x62C40D
end
0062C407 = clownpieceD22_FIX: 6

func clownpiece132
  jmp 0x637D40
end
00637B60 = clownpiece132: 6
00637C20 = clownpiece132: 6

;# guardeffect
func clownpiece133
  fadd qword ptr [0x85C028]
end
00640ED7 = clownpiece133



;#a214 ring
;#rotate
func clownpieceA214RING_0
  cmp word ptr [esi+0x140],0x00
  je short LABEL1
  jmp LABEL2
  LABEL1:
  cmp dword ptr [esi+0x144],0x00
  jne short LABEL3
  mov byte ptr [esi+0x113],0x00
  LABEL3:
  pushad 
  mov eax,[esi+0x113]
  cmp al,0xE6
  jna short LABEL4
  mov al,0xE6
  LABEL4:
  add al,0x19
  mov byte ptr [esi+0x113],al
  popad
  LABEL2:
  fldz
  nop
  fst dword ptr [esi+0x124]
  fstp dword ptr [esi+0x128]
end
00639BAF = clownpieceA214RING_0: 18
00639DDF = clownpieceA214RING_0: 18
;#scale
00639C25 = clownpiece19_NOP: 6
;#scale charge
00639E77 = clownpiece19_NOP: 6
;#1 hit charge
func clownpiece110
  cmp byte ptr [esi+0x194],0x0
  jmp 0x639F45
end
00639F3C = clownpiece110

;#b speed
func clownpiece111
  fld qword ptr [0x8581F8]
end
func clownpiece112
  fld qword ptr [0x867830]
end
0062B1CA = clownpiece111
0062B297 = clownpiece112
;#c speed
0062B425 = clownpiece111
0062B4F0 = clownpiece112
;#b air speed
0062B6EF = clownpiece111
0062B7D4 = clownpiece112
;#c air speed
0062B9BC = clownpiece111
0062BAA7 = clownpiece112

;#lv4 track no charge
func clownpiece113
  cmp byte ptr [eax+0x6AD],0x04
  jmp 0x639CA3
end
00639C8D = clownpiece113

;#track on charge
func clownpiece114
  cmp byte ptr [eax+0x6AD],0x04
  jmp 0x639EF5
end
00639EDF = clownpiece114

;#startup transp
func clownpieceA214RING_1A
  jl 0x639D59
  
  cmp word ptr [esi+0x140],0x01
  jne short LABEL1
  mov byte ptr [esi+0x194],0x00
  cmp word ptr [esi+0x142],0x00
  jne short LABEL1
  cmp byte ptr [esi+0x113],0xA0
  ja short LABEL1
  mov byte ptr [esi+0x113],0xA0
  LABEL1:
  mov ecx,[esi+0x35C]
  jmp 0x639D0B
end
func clownpieceA214RING_1B
  jl 0x639FCE
  
  cmp word ptr [esi+0x140],0x01
  jne short LABEL1
  mov byte ptr [esi+0x194],0x00
  cmp word ptr [esi+0x142],0x00
  jne short LABEL1
  cmp byte ptr [esi+0x113],0xA0
  ja short LABEL1
  mov byte ptr [esi+0x113],0xA0
  LABEL1:
  mov ecx,[esi+0x35C]
  jmp 0x639F80
end
;#transp
00639D03 = clownpieceA214RING_1A: 8
00639F78 = clownpieceA214RING_1B: 8
;#decel
;#0062CE21



;#a214 ring part 2

;#angle b
;#0062B1B8
;#0062B285
func clownpieceA214RING_4
  jne 0x62B1A4
  fld dword ptr [0x85BB84]
  push 0x03
  mov ecx,0x0000050C
  fstp dword ptr [esp+ecx]
  lea ecx,[esp+ecx]
  fldz
  jmp 0x62B1CA
end
func clownpieceA214RING_5
  jne 0x62B6C9
  fld qword ptr [0x867830]
  push 0x03
  mov ecx,0x0000056C
  fstp dword ptr [esp+ecx]
  lea ecx,[esp+ecx]
  fldz
  jmp 0x62B6EF
end
func clownpieceA214RING_4A
  jne 0x62B271
  fld dword ptr [0x85BB84]
  jmp 0x62B287
end
func clownpieceA214RING_5A
  jne 0x62B7A0
  cmp word ptr [esi+0x140],0x02
  jne 0x62BB33
  fld qword ptr [0x867830]
  push 0x03
  mov ecx,0x00000404
  fstp dword ptr [esp+ecx]
  lea ecx,[esp+ecx]
  jmp 0x62B7D4
end
0062B1B2 = clownpieceA214RING_4
0062B27F = clownpieceA214RING_4A
;#angle b air
;#0062B6DD
;#0062B7C2
0062B6D7 = clownpieceA214RING_5
0062B7AE = clownpieceA214RING_5A
;#angle c
func clownpieceA214RING_ANGLE_0
  fld dword ptr [0x85BB80]
end
func clownpieceA214RING_ANGLE_1
  fld dword ptr [0x871540]
end
0062B40F = clownpieceA214RING_ANGLE_0
0062B4DA = clownpieceA214RING_ANGLE_0
;#angle c air
0062B9A6 = clownpieceA214RING_ANGLE_1
0062BA91 = clownpieceA214RING_ANGLE_1
;#angle insert
func clownpieceA214RING_UNUSED0
  fld dword ptr [0x85BB84]
  push 0x03
  fst dword ptr [esp+ecx]
end
func clownpieceA214RING_UNUSED1
  fld dword ptr [0x85BB84]
  push 0x03
  fstp dword ptr [esp+ecx]
end
;#extra transp stuff
func clownpieceA214RING_THISSUCKS
  cmp al,0x10
  jb 0x6365F7
  sub al,0x10
end
00639D3D = clownpieceA214RING_THISSUCKS: 10
00639FB2 = clownpieceA214RING_THISSUCKS: 10




;# random notes Clownpiece


;#fld dword ptr [00871538] 3
;#fld dword ptr [008589F0] 2
;#[0085AE94] 20
;#0085BCA4 6
;#0085BC44 9
;#00858830 12
;#0085BAB8 1380
;#008575A4 640
;#008575A8 480
;#00636480 5B dur
;#0085B984 90
;#
;#0061E056 stand?
;#0061E2DC walk spd
;#0061F109 air backdash
;#0061EEF5 airdash
;#0061EAFC grounddash

;#max replace line 112?




;#a22 split

;#0062CB60
;# LEA PROBLEM I guess the issue is calls. we need sub esp first.
func clownpieceA22SPLIT
  pushf
  pushad
  sub esp,0x40
  call LABELZ
  call LABELZ
  call LABELZ
  call LABELZ
  add esp,0x40
  popad
  popf
  jmp 0x62CB7C
  
  LABELZ:
  call LABELX
  call LABELX
  call LABELX
  ret
  
  LABELX:
  fldz 
  fst dword ptr [esp+0x15C]
  fstp dword ptr [esp+0x160]
  fld dword ptr [0x85B870]
  
  fstp dword ptr [esp+0x164]
  movzx eax,byte ptr [esi+0x104]
  fld dword ptr [esi+0xF0]
  push 0x03
  
  fld dword ptr [0x85B984]
  mov ax,[esi+0x140]
  movzx eax,ax
  push eax
  fild dword ptr [esp]
  pop eax
  fmulp st1
  faddp 
  movzx eax,byte ptr [esi+0x104]
  
  lea edx,[esp+0x160]
  push edx
  push edi
  fstp dword ptr [esp+0x1C]
  push eax
  fld dword ptr [esp+0x20]
  
  sub esp,0x08
  fstp dword ptr [esp+0x04]
  mov ecx,esi
  jmp short LABELXX
  
  LABELD:
  cmp byte ptr [esi+0x104],0xFF
  jne short LABELA
  fsubp st1
  jmp short LABELB
  LABELA:
  faddp 
  LABELB:
  jmp short LABELC
  
  LABELXX:
  fld dword ptr [esi+0xEC]
  fld dword ptr [0x85B984]
  mov ax,[esi+0x142]
  movzx eax,ax
  push eax
  fild dword ptr [esp]
  pop eax
  fmulp st1
  
  fsub dword ptr [0x85B984]
  jmp short LABELD
  LABELC:
  inc word ptr [esi+0x140]
  cmp word ptr [esi+0x140],0x03
  jl short LABELE
  mov word ptr [esi+0x140],0x0000
  inc word ptr [esi+0x142]
  
  LABELE:
  fstp dword ptr [esp]
  push 0x0000033A
  call 0x46EB30
  ret
end
0062C859 = clownpieceA22SPLIT

func clownpieceA22SPLIT_1
  fld dword ptr [esi+0x378]
  cmp dword ptr [esi+0x144],0x00
  jne short LABEL3
  mov byte ptr [esi+0x194],0x01
  mov dword ptr [esi+0x190],0x00000000
  
  pushad
  mov eax,[esi+0x398]
  cmp word ptr [eax+0x13C],0x0236
  je short LABEL1
  cmp word ptr [eax+0x13C],0x0238
  je short LABEL1
  LABEL2:
  popad 
  jmp short LABEL3
  LABEL1:
  fld dword ptr [0x858830]
  fstp dword ptr [esi+0xF4]
  jmp LABEL2
  LABEL3:
  nop
end
0063BE7A = clownpieceA22SPLIT_1: 6

func clownpieceA22SPLIT_ONHIT
  cmp dword ptr [esi+0x190],0x5
end
0063BD2A = clownpieceA22SPLIT_ONHIT

func clownpieceA22SPLIT_3
  fld1
  fst dword ptr [esi+0x11C]
  fstp dword ptr [esi+0x120]
  
  fld dword ptr [esi+0xEC]
  cmp byte ptr [esi+0x104],0xFF
  jne short LABEL1
  fsub dword ptr [esi+0xF4]
  jmp short LABEL2
  LABEL1:
  fadd dword ptr [esi+0xF4]
  LABEL2:
  fstp dword ptr [esi+0xEC]
  
  
  ;pushad
  ;mov eax,[esi+0x398]
  ;movzx eax,word ptr [eax+0x13C]
  ;cmp ax,0x0031
  ;jle short LABEL4
  ;cmp ax,0x0096
  ;jl short LABEL5
  ;LABEL4:
  ;popad
  ;jmp short LABEL6
  ;LABEL5:
  ;mov byte ptr [esi+0x194],0x00
  ;jmp short LABEL4
  ;LABEL6:
  ;nop
  
  pushad
  push 0x02
  push 0x02
  push 0x00
  mov ecx,esi
  call 0x48CE90
  test al,al
  popad
  jne 0x6365F7
  
  
  
  cmp byte ptr [esi+0x194],0x01
  je short LABEL7
  mov al,[esi+0x113]
  cmp al,0x0A
  jb short LABEL7
  sub al,0x0A
  mov byte ptr [esi+0x113],al
  LABEL7:
  jmp 0x63BECF
  
end
0063BEAF = clownpieceA22SPLIT_3

func clownpieceA22SPLIT_8
  mov al,[esi+0x113]
  cmp al,0x05
  jb 0x6365F7
  sub al,0x05
  mov bl,0xFB
end
0063BECF = clownpieceA22SPLIT_8: 18

func clownpieceA22SPLIT_JMP
  jmp 0x62C859
end

;#c free estate
0062CAA0 = clownpieceA22SPLIT_JMP: 7

;#word ptr 190?
;#we use 194 instead now. is it fine?

;#b air
0062CD7A = clownpieceA22SPLIT_JMP: 7

;#c air
0062D01A = clownpieceA22SPLIT_JMP: 7

;#etc
func clownpieceA22SPLIT_UNFLDZ
  call 0x487870
end
0062C84C = clownpieceA22SPLIT_UNFLDZ: 7
0062CD6D = clownpieceA22SPLIT_UNFLDZ: 7



;#a623
;#b dur
func clownpieceA623USB_DUR
  cmp dword ptr [esi+0x144],0x29
end
0062C29A = clownpieceA623USB_DUR: 7
;#c dur
0062C3E9 = clownpieceA623USB_DUR: 7
;#ja22b estate
func clownpieceA623USB
  fldz
  fstp dword ptr [esi+0x12C]
  fld dword ptr [esi+0xEC]
end
0063A981 = clownpieceA623USB
;#bullet behavior
0063AAC7 = clownpiece19_NOP: 24

;#c spawn
;#x
func clownpieceA623USB_CX
  pushad 
  mov eax,[esi+0x170]
  fld dword ptr [eax+0xEC]
  popad 
end
func clownpieceA623USB_CY
  pushad 
  mov eax,[esi+0x170]
  fld dword ptr [eax+0xF0]
  popad 
end
0062C3C9 = clownpieceA623USB_CX
;#y
0062C3A3 = clownpieceA623USB_CY

;#skip pos control
func clownpiece140
  jmp 0x63A88F
end
0063A885 = clownpiece140

;#1 hit
func clownpieceA623USB_1HIT
  mov byte ptr [esi+0x194],0x00
  mov byte ptr [esi+0x113],0x7F
end
;# is this A623 usb??
0063A9B4 = clownpieceA623USB_1HIT

;#3sc usb
;#duplication
0063EB9F = clownpiece19_NOP: 9
;#skip pos control
func clownpiece3SCUSB_SKIP
  jmp 0x63EBD4
  push ebp
  mov ecx,esi
  jmp 0x63EBCF
end
0063EBCA = clownpiece3SCUSB_SKIP
;#spawn
0062F70A = clownpieceA623USB_CX
0062F6E3 = clownpieceA623USB_CY
;#etc angles
func clownpiece3SCUSB_ANGLES
  fldz
  fstp dword ptr [esi+0x12C]
  fld dword ptr [esi+0xEC]
end
0063EC57 = clownpiece3SCUSB_ANGLES

func clownpiece3SCUSB_IDK
  fstp dword ptr [esi+0x12C]
  fldz
  fstp dword ptr [esi+0x12C]
  jmp 0x63EB7A
end
0063EB6C = clownpiece3SCUSB_IDK

;#uncancelable
func clownpiece3SCUSB_UNCANCEL
  jmp 0x63EBCA
end
0063EBB7 = clownpiece3SCUSB_UNCANCEL
;#hitstuff
func clownpiece3SCUSB_HITS
  cmp byte ptr [esi+0x113],0x7F
  jna short LABEL1
  cmp byte ptr [esi+0x194],0x00
  jne short LABEL1
  mov byte ptr [esi+0x113],0x7F
  mov word ptr [esi+0x140],0x0059
  LABEL1:
  mov eax,[esi+0x190]
end
0063EB83 = clownpiece3SCUSB_HITS



;#3sc crown
;#spd
0062E691 = clownpiece2_FLDZ
;#sizes
0063CE87 = clownpiece2_FLD1
0063CE99 = clownpiece2_FLD1
0063CEAB = clownpiece2_FLD1
0063CEBD = clownpiece2_FLD1

func clownpiece115
  fmul dword ptr [0x85BB84]
end
0063CE8D = clownpiece115

func clownpiece116
  fmul dword ptr [0x85AE94]
end
0063CEB1 = clownpiece116

;#hitstuff
0063CF31 = clownpiece19_NOP: 6

;#fire period
func clownpiece117
  mov ebp,0x00000004
end
0062E669 = clownpiece117

;#max fire
func clownpiece118
  cmp word ptr [esi+0x7D0],0x0014
end
0062E67B = clownpiece118

;#skip last hit
func clownpiece119
  cmp word ptr [esi+0x7D0],0x09
  jmp 0x62E6BC
end
0062E6A5 = clownpiece119



;#1sc ring
;#spd
func clownpiece1SCRING_FLD
  fld qword ptr [0x867830]
end
0062E1E1 = clownpiece1SCRING_FLD
;#spd air
0062F9FF = clownpiece1SCRING_FLD
;#transp?
func clownpiece1SCRING_TRANSP0
  pushad 
  mov eax,[esi+0x35C]
  fld dword ptr [eax+0x04]
  fmul qword ptr [0x85C008]
  fstp dword ptr [eax+0x04]
  popad 
  jl 0x63C87F
  
  cmp word ptr [esi+0x140],0x01
  jne short LABEL1
  mov byte ptr [esi+0x194],0x00
  cmp word ptr [esi+0x142],0x00
  jne short LABEL1
  cmp byte ptr [esi+0x113],0xA0
  ja short LABEL1
  mov byte ptr [esi+0x113],0xA0
  LABEL1:
  mov ecx,[esi+0x35C]
  
  jmp 0x63C82F
end
;#ring shit again
0063C827 = clownpiece1SCRING_TRANSP0: 8
;#1 hit stuff
;#scale
func clownpiece1SCRING_N
  cmp dword ptr [esi+0x144],0x00
  jne short LABELA
  mov byte ptr [esi+0x194],0x01
  LABELA:
  fld dword ptr [esi+0x11C]
  
  cmp word ptr [esi+0x140],0x00
  je short LABEL1
  jmp LABEL2
  LABEL1:
  cmp dword ptr [esi+0x144],0x00
  jne short LABEL3
  mov byte ptr [esi+0x113],0x00
  LABEL3:
  pushad 
  mov eax,[esi+0x113]
  cmp al,0xE6
  jna short LABEL4
  mov al,0xE6
  LABEL4:
  add al,0x19
  mov byte ptr [esi+0x113],al
  popad
  LABEL2:
  fldz
  nop
  
  push ebx
  mov ecx,esi
  fst dword ptr [esi+0x124]
  fstp dword ptr [esi+0x128]
  fstp dword ptr [esi+0x120]
  
  jmp 0x63C7C8
end

0063C7A5 = clownpiece1SCRING_N


;#angle
;#0062E1CF
func clownpiece1SCRING_ANGLE
  jne 0x62E1BB
  fld dword ptr [0x85BB84]
  push 0x03
  mov edx,0x0000053C
  fstp dword ptr [esp+edx]
  lea edx,[esp+edx]
  fldz
  jmp 0x62E1E1
end
func clownpiece1SCRING_ANGLEAIR
  jne 0x62F9D9
  fld qword ptr [0x867830]
  push 0x03
  mov edx,0x00000428
  fstp dword ptr [esp+edx]
  lea edx,[esp+edx]
  fldz
  jmp 0x62F9FF
end
0062E1C9 = clownpiece1SCRING_ANGLE
;#angle air
0062F9E7 = clownpiece1SCRING_ANGLEAIR

;#transp
func clownpiece1SCRING_TRANSP
  cmp al,0x10
  jb 0x6365F7
  sub al,0x10
  mov bl,0xF0
end
0063C861 = clownpiece1SCRING_TRANSP: 12

;#ring stuff
;#0063C5A9
;#size?
;#0063C7B8



;#3sc discard
;#free estates to 637D11
func clownpiece134
  jmp 0x637CB6
end
00637CDF = clownpiece134
;#free estates to 637D9F
func clownpiece135
  jmp 0x637DF1
end
00637D4F = clownpiece135
;#free estates to 637E07
func clownpiece136
  jmp 0x6365F7
end
00637DA1 = clownpiece136

;#spawn y
;#0062EF38
;# LEA ESP PUSHAD PROBLEM?
func clownpiece3SCDISC
  
  pushf
  pushad

  sub esp,0x40
  call LABEL2
  add esp,0x40
  
  ;mov eax,0x04
  ;mov ebx,0x000000FF
  ;mov ecx,0x00
  ;mov edi,0xFFFFFFFF
  ;mov ebp,0x1E
  
  popad
  popf
  
  jmp 0x62EF79
  LABEL1:
  push 0x03
  fldz
  fstp dword ptr [esp+0x130]
  lea ecx,[esp+0x130]
  jmp 0x62EF0C
  LABEL2:
  call LABEL1
  call LABEL1
  call LABEL1
  ret
end
0062EEFA = clownpiece3SCDISC

func clownpiece3SCDISC_RET
  call 0x46EB30
  ret
end
func clownpiece3SCDISC_3
  fld1 
  fstp dword ptr [esp+0x134]
  push 0x03
  movzx eax,byte ptr [esi+0x104]
  fld dword ptr [esi+0xF0]
  jmp 0x62EF95
end
0062EF72 = clownpiece3SCDISC_RET
0062EF79 = clownpiece3SCDISC_3

;#x
func clownpiece138
  fldz
  fadd dword ptr [esi+0xEC]
end
0062EF58 = clownpiece138: 10
;#y height
;#int to float example
func clownpiece3SCDISC_0
  fld dword ptr [esi+0xF0]
  fld dword ptr [0x85B984]
  mov ax,[esi+0x142]
  movzx eax,ax
  push eax
  fild dword ptr [esp]
  pop eax
  fmulp st1
  faddp
  inc word ptr [esi+0x142]
  movzx eax,byte ptr [esi+0x104]
end
0062EF2B = clownpiece3SCDISC_0: 19

func clownpiece3SCDISC_1
  mov ax,[esi+0x140]
  cmp ax,0x0004
  jl 0x63120A
  cmp ax,0x000A
  jg 0x63120A
  jmp 0x62EEFA
end

0062EEEC = clownpiece3SCDISC_1

;#max prj spd
func clownpiece137
  fld dword ptr [0x85AE94]
end
0062EF0C = clownpiece137
0063DE5C = clownpiece137

;#skip explosion effs
func clownpiece3SCDISC_SKIP
  jmp 0x63DF66
  push 0x03
  fst dword ptr [esp+0x274]
end
0063DF0A = clownpiece3SCDISC_SKIP


;#a214 circus stuff again
;#momentum fix
func clownpieceA214WALK_5
  cmp word ptr [esi+0x13E],0x03
  jl short LABEL1
  fldz
  fstp dword ptr [esi+0xF4]
  LABEL1:
  nop
end
;#b
00629967 = clownpieceA214WALK_5
00629F1D = clownpieceA214WALK_5

;#min hold dur
func clownpieceA214WALK_6
  cmp word ptr [esi+0x140],0x04
  jl short LABEL1
  cmp byte ptr [esi+0x7F4],0x00
  LABEL1:
  nop
end
;#b
00629AB7 = clownpieceA214WALK_6: 7
0062A06D = clownpieceA214WALK_6: 7
0062A647 = clownpieceA214WALK_6: 7
0062AC40 = clownpieceA214WALK_6: 7


;#a22 acura

func clownpieceA22ACURA_0
  mov byte ptr [esi+0x18C],0x0B
  cmp word ptr [esi+0x13E],0x02
  jne short LABELA
  fld dword ptr [esi+0xF8]
  fsub dword ptr [esi+0x100]
  fstp dword ptr [esi+0xF8]
  LABELA:
  mov ebx,0x00000001
end

func clownpieceA22ACURA_1
  fldz
  fst dword ptr [esi+0xF4]
  fstp dword ptr [esi+0xF8]
  jmp 0x62D532
end

func clownpieceA22ACURA_2
  fld qword ptr [0x867830]
  fstp dword ptr [esi+0xF8]
  jmp 0x62D532
end

func clownpieceA22ACURA_3
  fld dword ptr [0x85AE94]
  fstp dword ptr [esi+0xF8]
  jmp 0x62D532
end

func clownpieceA22ACURA_CREATION
  
  fld dword ptr [esi+0xF8]
  cmp dword ptr [esi+0x144],0x00
  jne LABEL4
  fmul dword ptr [0x85C228]
  fstp dword ptr [esi+0xF8]
  jmp LABEL3

  cmp dword ptr [esi+0x144],0x10
  jnl LABEL4
  fmul dword ptr [0x85C228]
  fstp dword ptr [esi+0xF8]
  LABEL5:
  jmp 0x62D368
  LABEL4:
  cmp dword ptr [esi+0x144],0x10
  jne LABEL6
  fstp dword ptr [esi+0xF8]
  fld dword ptr [0x85B960]
  fstp dword ptr [esi+0xF8]
  fld dword ptr [0x85AE94]
  fstp dword ptr [esi+0xF4]
  jmp LABEL5
  LABEL6:
  cmp dword ptr [esi+0x144],0x24
  jnl LABEL7
  fmul dword ptr [0x85C228]
  fstp dword ptr [esi+0xF8]
  jmp LABEL5
  LABEL7:
  cmp dword ptr [esi+0x144],0x24
  jne LABEL8
  fmul dword ptr [0x87150C]
  fstp dword ptr [esi+0xF8]
  jmp LABEL5
  LABEL8:
  cmp dword ptr [esi+0x144],0x38
  jnl LABEL9
  fdiv dword ptr [0x85C228]
  fstp dword ptr [esi+0xF8]
  jmp LABEL5
  LABEL9:
  fdiv dword ptr [0x871538]
  fld dword ptr [0x858830]
  fstp dword ptr [esi+0xF4]
  fstp dword ptr [esi+0xF8]
  fld dword ptr [0x85BC6C]
  fstp dword ptr [esi+0x100]
  jmp LABEL1
  
  LABEL3:
  fldz
  push 0x03
  fst dword ptr [esp+0x2B8]
  lea ecx,[esp+0x2B8]
  fstp dword ptr [esp+0x2BC]
  push ecx
  fld1
  push 0x01
  fstp dword ptr [esp+0x2C8]
  mov ecx,esi
  movzx edx,byte ptr [esi+0x104]
  fld dword ptr [esi+0xF0]
  push edx
  sub esp,0x08
  fstp dword ptr [esp+0x04]
  fld dword ptr [esi+0xEC]
  fstp dword ptr [esp]
  push 0x0000033B
  call 0x46EB30
  cmp byte ptr [esi+0x6AF],0x01
  jl LABEL1
  mov dword ptr [esi+0x190],0x00000000
  mov byte ptr [esi+0x194],0x01
  LABEL2:
  jmp LABEL5
  LABEL1:
  mov byte ptr [esi+0x194],0x00
  jmp LABEL2
  nop
end
;#end with jmp 0062D371
;#creation example 0062D47C 00621770
;#attached object effect
func clownpieceA22ACURA_4
  mov ecx,[esi+0x398]
  cmp word ptr [ecx+0x13C],0x023A
  jl 0x6365F7
  cmp word ptr [ecx+0x13C],0x023D
  jg 0x6365F7
  push 0x00
  push 0x00
  mov ecx,esi
  call 0x48CF60
  cmp word ptr [esi+0x13E],0x02
  jl 0x63C40C
  jmp 0x63C49A
end
0063BEF8 = clownpieceA22ACURA_4
;#creation test

;#b ground
0062D40A = clownpieceA22ACURA_3
0062D36A = clownpieceA22ACURA_0
0062D17E = clownpieceA22ACURA_CREATION

;#c ground
0062D7E7 = clownpieceA22ACURA_2
0062D747 = clownpieceA22ACURA_0
0062D55B = clownpieceA22ACURA_CREATION

;#b air
0062DBBC = clownpieceA22ACURA_1
0062DB15 = clownpieceA22ACURA_0
0062D93C = clownpieceA22ACURA_CREATION

;#c air
0062DFBF = clownpieceA22ACURA_1
0062DF18 = clownpieceA22ACURA_0
0062DD0D = clownpieceA22ACURA_CREATION

;#air level
func clownpiece130
  cmp byte ptr [esi+0x6AF],0x02
end
func clownpiece131
  cmp byte ptr [esi+0x6AF],0x01
end
00635683 = clownpiece130
00635592 = clownpiece130
00635197 = clownpiece131



;#6[A] decel
func clownpiece126
  fsub qword ptr [0x85F360]
end
006211BF = clownpiece126

;# j2A momentum
func clownpiece127
  fld dword ptr [0x859F00]
end
00632821 = clownpiece127

;# j2A gravity
func clownpiece128
  fld dword ptr [0x8589F0]
end
006327A6 = clownpiece128
;# j2A invis duration
;#006219CF
;# force max visibility
func clownpiece129
  mov byte ptr [esi+0x113],0xFF
end
006219CF = clownpiece129: 13


;#the forgotten
;#dash spd
func clownpiece120
  fld dword ptr [0x85C610]
end
0061EAFC = clownpiece120
;#airdash spd
func clownpiece121
  fld dword ptr [0x858F40]
end
0061EEF5 = clownpiece121
;#hj9
func clownpiece122
  fld dword ptr [0x858F40]
end
0061F43C = clownpiece122

;#flight init
func clownpiece123
  fld dword ptr [0x858830]
end
006325F6 = clownpiece123

;#66a decel
func clownpiece124
  fsub qword ptr [0x858820]
end
00621713 = clownpiece124

;# the negatives
func clownpiece125
  fldz
  fsub dword ptr [0x858F40]
end
;# hj7
00620429 = clownpiece125
;# airbackdash
0061F109 = clownpiece125

func clownpiece66B
  cmp word ptr [esi+0x13E],0x01
  jl 0x624E4B
  jmp 0x624E0F
end
00624E05 = clownpiece66B
func clownpiece66B_LOOP
  cmp dword ptr [esi+0x144],0x8
  jmp 0x624F03
end
00624EFB = clownpiece66B_LOOP
func clownpiece66B_SOUND
  cmp dword ptr [esi+0x144],0x00
  jne short LABEL1
  push 0x1D
  mov ecx,esi
  call 0x439490
  LABEL1:
  jmp 0x624F0C
end
00624F03 = clownpiece66B_SOUND
func clownpiece66B_X
  fld dword ptr [0x85B3B0]
end
00624E80 = clownpiece66B_X

func clownpieceJ8A_X
  fld dword ptr [0x85C590]
end
00621B74 = clownpieceJ8A_X
;#
;#