extern void Physics_BounceReflect(int a, int b, int c);
extern int Object_Find(void);
extern int Physics_Bounce(int a, int b, int c);
extern int Float_Copy(int x);
int Physics_BounceWithGravity(int a, int b, int c)
{
  register int qq __asm__("r6");
  int d;
  int r;
  Physics_BounceReflect(a, b, c);
  qq = Object_Find();
  r = Physics_Bounce(a, b, c);
  if (r < 0) {
    r = Float_Copy(-1);
  } else {
    d = c - r;
    if (qq != 20) {
      register int sh __asm__("r1");
      register int base __asm__("r0") = 0x02001518;
      __asm__ volatile("" : "+r" (base));
      sh = qq << 3;
      base += 4;
      sh += base;
      *(int *)sh = *(int *)sh + d;
    }
    r = d;
  }
  return r;
}
