The PokéCommunity Forums  

Go Back   The PokéCommunity Forums > knizz
Sign Up Rules/FAQ Live Battle Blogs Mark Forums Read

Notices


Conversation Between knizz and sonic1
Showing Visitor Messages 1 to 10 of 35
  1. knizz
    August 12th, 2012 10:22 AM
    knizz
    That's correct. I don't know the names by heart. But I think their names start with "copy_" or "write_". There are X and Y fields in "uns", change those. A loop then converts the data from the "uns" into OAM format but not at the final location. A second loop writes the prepared data to the real Object Attribute Memory.

  2. sonic1
    August 7th, 2012 08:50 AM
    sonic1
    Hey knizz, 's been a long time, no? I need your help now. I know you have much experience in OAM fields, and i need to know something. As the OAM memory is refreshed every frame, i can't "runtime" edit it to create an OAM. What i need to know (firered) is: Is there any routine like "Create OAM" or something? And if not, how could i go edit the OAM position? Is there a routine that changes its coordinates or something?
    Also, if it helps, i know that this is all related to the "unknown_structure" you documented in your DB!

    Best regards, Sonic1!

  3. knizz
    April 18th, 2012 11:30 AM
    knizz
    What I did is create an enumeration with the numbers you need to put in R1 to select the property of the pokemon you want to get or set. When you have
    mov R0, blabla
    mov R1, #45
    mov R2, fubar
    bl set_pokemon_data
    You can right click #45 and choose the correct property from one of the submenus.

    Use Ctrl+Z (or was it alt+q?) to force zero offsets [R1, 0] to be interpreted as structure [R01, #npc_state.field1]

  4. sonic1
    April 7th, 2012 12:13 PM
    sonic1
    Yeah, i just arrived from my finalist-trip and downloaded your db. But i checked the routines get/set_pokemon_data... What exactly did you do? Srry xD

    Also: As i've told you before, i'm making a emerald ida database. When i was checking somethings, i've come across a problem. You see, when there is, for example, ldrb r0, [r0, #1], i can successfully convert it in LDRB R0, [R1,#npc_state.field1]. Now, in this case, LDRB R0, [R1], instead of appearing LDRB R0, [R1,#npc_state.bitfield_DX], it just appears LDRB R0, [R1,#npc_state] in my IDA database. This is very annoying, as i can't figure out what is the first field of some structures just by sheer looking. Could you help me on this issue, please?

  5. knizz
    April 6th, 2012 12:23 AM
    knizz
    I've improved the last version of the db so "set_pokemon_data", etc. are much easier to understand. (just contact me later about it.)

  6. knizz
    March 24th, 2012 06:20 PM
    knizz
    Seems correct.

  7. sonic1
    March 24th, 2012 05:42 PM
    sonic1
    Wow, so i would just do
    ...
    ldr r3, number
    mov r4, #15
    ldr r0, #16
    lsr r1, r3, #4
    and r4, r3
    ....
    ??

    Sorry if this isn't what you're talkin about, but i don't know C#. My 'system' is actually a group of routines that decode letters in usable codes in a rom, and i only have 0x49 usable letters.

    And sorry if i misunderstood anything, my formula is a*b+c = z
    Multiply first two and add the third. (lets say 0x196. 1st byte 0x28, 2nd byte 0xA, 3rd byte 0x6. 0x196 = 0x28 * 0xA + 0x6.)

    If it isn't this one, you can always explain me that one.
    Thanks

  8. knizz
    March 24th, 2012 02:55 AM
    knizz
    I just realized something.

    a=16
    b=bignum>>4
    c=bignum&15

    lol, that was easy

  9. knizz
    March 24th, 2012 02:47 AM
    knizz
    What you want to do is HARD: http://en.wikipedia.org/wiki/Integer_factorization

    But your domain is small. Only 1280 cases!
    And only the end result has to be in less than 0x49. Right?
    You can just pre-calculate all situations and put the table into your software
    uint a = table1[bignum];
    uint b = bignum/a;
    int c = bignum-a*b;

  10. sonic1
    March 21st, 2012 03:28 PM
    sonic1
    Hey knizz! Today i'm here to ask for help (again, you must be like this -.-').

    But its rather more maths than ASM this time.

    My problem is the following: I have a system where a byte max value can only be 0x49.
    I want to get values in a range of 0-0x500 (HEX). To do it, i must use 3 bytes: Multiply first two and add the third. (lets say 0x196. 1st byte 0x28, 2nd byte 0xA, 3rd byte 0x6. 0x196 = 0x28 * 0xA + 0x6.)

    Now what i want is a routine that given a value of that range, automatically finds the 1, 2 and 3 bytes needed for the final result using the formula above.
    I'm not asking you to make the routine, but help me with the conditions/logic (like, i know that if the value i want is 0, then i just need one of the 2 bytes be 0 and the 3rd be 0 too, becaus X*0 = 0 + 0 = 0)
    My problem is that there are thousands of ways to do it, and thats what is confusing me.

    Many thanks!


All times are UTC -8. The time now is 03:06 AM.


Style by Nymphadora, artwork by Sa-Dui.
Like our Facebook Page Follow us on Twitter © 2002 - 2014 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2014 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.