Tecmonster Posted June 29, 2013 Share Posted June 29, 2013 attached is an ips patch made from 1991 TSB and JStout's 1st rom in the 1st post of this thread. It passes my tests. JSTOUT COM PASSING HACK.ips Sweet, thanks, that one works for me. The first time, I did use the original game to make the patch, but I also used the juiced version of jstout's file, so maybe that's what went wrong. Quote Link to comment Share on other sites More sharing options...
buck Posted June 29, 2013 Share Posted June 29, 2013 besides the obvious badassness of this development, I am having fun "baiting" COM QBs...I never thought I'd see the day. excellent. GameplayLoop and Knobbe 2 Quote Link to comment Share on other sites More sharing options...
Tecmonster Posted June 29, 2013 Share Posted June 29, 2013 besides the obvious badassness of this development, I am having fun "baiting" COM QBs...I never thought I'd see the day. excellent. I do love that it provides a legitimate alternative to blitzing your linebacker now. Quote Link to comment Share on other sites More sharing options...
DFM Posted June 29, 2013 Share Posted June 29, 2013 Why blitz your linebacker ever, save the specific run plays? Quote Link to comment Share on other sites More sharing options...
Tecmonster Posted June 29, 2013 Share Posted June 29, 2013 Why blitz your linebacker ever, save the specific run plays? against the computer? Because I think it's the most efficient defensive tactic vs. the pass. Otherwise, you end up dropping back and covering some guy who only has a 20-25% chance of being targeted anyway . . . and wasting him. And, even if he does throw to the man you covered, a linebacker vs. a juiced computer WR usually results in a completion anyway. bruddog 1 Quote Link to comment Share on other sites More sharing options...
buck Posted July 7, 2013 Share Posted July 7, 2013 This is the same code as above but changing the rectangular check to a circle (requires more space for better accuracy). .define DISTANCE $DD .define TEMP_HI $DE .define RECEIVER_LO $40 .define RECEIVER_HI $41 .define DEFENDER_LO $42 .define DEFENDER_HI $43 .define X_LO_APART $44 .define X_HI_APART $45 .define X_APART $44 .define Y_APART $45 .define APART_LO $44 .define APART_HI $45 START: LDY #$00 ; SET TO FIRST COMMAND BYTE TYA PHA @NEXT_RECEIVER: PLA TAY ; CHECK FOR NO MORE RECEIVERS CPY $DC BCC @CONTINUE BEQ @CONTINUE ; NO OPEN RECEIVERS SO RANDOM THROW LDA $3B AND $DC TAY RTS @CONTINUE: INY ; SET TO NEXT RECEIVER ; FIND DISTANCE LDA ($3E),Y AND #$F0 LSR LSR LSR LSR STA DISTANCE BNE @LOCATIONS JMP @EXIT @LOCATIONS: ; GET RECEIVER LOCATION LDA ($3E),Y AND #$0F ; RECEIVER ASL TAX ; PLAYER INDEX TYA PHA ; STORE Y ; WHICH PLAYER? LDY #$08 LDA ($AE),Y BMI @2P LDA $DEEB,X STA RECEIVER_LO LDA $DEEC,X STA RECEIVER_HI JMP @DEFENDER @2P: LDA $DF01,X STA RECEIVER_LO LDA $DF02,X STA RECEIVER_HI @DEFENDER: ; GET DEFENDER LOCATION LDX #$14 ; SET TO LAST DEFENDER INDEX @NEXT_DEFENDER: ; WHICH PLAYER? LDY #$08 LDA ($AE),Y BMI @1P LDA $DF01,X STA DEFENDER_LO LDA $DF02,X STA DEFENDER_HI JMP @CALC @1P: LDA $DEEB,X STA DEFENDER_LO LDA $DEEC,X STA DEFENDER_HI @CALC: ; FIND X SIDE LDY #$15 LDA (RECEIVER_LO),Y CMP (DEFENDER_LO),Y BCC @RIGHT ; RECEIVER < DEFENDER BNE @LEFT ; RECEIVER > DEFENDER DEY LDA (RECEIVER_LO),Y CMP (DEFENDER_LO),Y BCC @RIGHT ; RECEIVER < DEFENDER ; RECEIVER > DEFENDER ; X DISTANCE CHECK @LEFT: LDY #$14 LDA (RECEIVER_LO),Y SEC SBC (DEFENDER_LO),Y STA X_LO_APART INY LDA (RECEIVER_LO),Y SBC (DEFENDER_LO),Y STA X_HI_APART JMP @XAPART @RIGHT: LDY #$14 LDA (DEFENDER_LO),Y SEC SBC (RECEIVER_LO),Y STA X_LO_APART INY LDA (DEFENDER_LO),Y SBC (RECEIVER_LO),Y STA X_HI_APART @XAPART: LDA X_HI_APART BEQ @X_LO JMP @GOOD ; VERY LARGE DISTANCE @X_LO: LDA X_LO_APART LSR LSR LSR CMP DISTANCE BCS @GOOD ; OUT OF X DISTANCE STA X_APART ; IN X DISTANCE = CHECK Y DISTANCE ; FIND Y SIDE LDY #$17 LDA (RECEIVER_LO),Y CMP (DEFENDER_LO),Y BCC @BOTTOM ; RECEIVER < DEFENDER ; RECEIVER > DEFENDER ; Y DISTANCE CHECK @TOP: LDA (RECEIVER_LO),Y SEC SBC (DEFENDER_LO),Y JMP @YAPART @BOTTOM: LDA (DEFENDER_LO),Y SEC SBC (RECEIVER_LO),Y @YAPART: LSR LSR LSR CMP DISTANCE BCS @GOOD ; OUT OF Y DISTANCE STA Y_APART ; IN Y DISTANCE = CHECK RADIUS ; CHECK RADIUS DISTANCE ; A^2 LDY X_APART BEQ @NO_X LDA #$00 @LOOP_X: CLC ADC X_APART DEY BNE @LOOP_X STA X_APART ; B^2 @NO_X: LDY Y_APART BEQ @NO_Y LDA #$00 @LOOP_Y: CLC ADC Y_APART DEY BNE @LOOP_Y STA Y_APART @NO_Y: ; A^2 + B^2 LDA X_APART CLC ADC Y_APART STA APART_LO LDA #$00 ADC #$00 STA APART_HI ; SQRT(A^2 + B^2) TXA PHA LDY #$00 LDX #$07 @loop: TYA ORA @stab-1,X STA TEMP_HI LDA APART_HI CMP TEMP_HI BCC @skip1 SBC TEMP_HI STA APART_HI TYA ORA @stab,x TAY @skip1: ASL APART_LO ROL APART_HI DEX BNE @loop ; last iteration STY TEMP_HI LDA APART_LO CMP #$80 LDA APART_HI SBC TEMP_HI BCC @skip2 INY @skip2: PLA TAX CPY DISTANCE BCC @NEXT ; IN RADIUS DISTANCE = BAD THROW ; MORE DEFENDERS? @GOOD: DEX DEX BMI @THROW ; OPEN JMP @NEXT_DEFENDER @NEXT: JMP @NEXT_RECEIVER @THROW: PLA TAY @EXIT: RTS @stab: .BYTE $01,$02,$04,$08,$10,$20,$40,$80 do you have a ROM with this "radial" distancing hack applied? thx Quote Link to comment Share on other sites More sharing options...
buck Posted July 11, 2013 Share Posted July 11, 2013 jstout, would it be feasible to port this beautiful hack to SNES TSB 1? tommy2teeth 1 Quote Link to comment Share on other sites More sharing options...
jstout Posted July 11, 2013 Author Share Posted July 11, 2013 jstout, would it be feasible to port this beautiful hack to SNES TSB 1? Yes, the code would look nearly the same with just RAM locations changed and ability to use 16-bit numbers. I'll see about writing it up when I get the chance. BTW, I do have a ROM with the Radial code but need to find it on my hard drive (or recompile) and then I'll post it. tommy2teeth and GameplayLoop 2 Quote Link to comment Share on other sites More sharing options...
qbvikings Posted July 15, 2013 Share Posted July 15, 2013 This would be an awesome addition to SNES roms, which are still far too easy even with max juice. tommy2teeth 1 Quote Link to comment Share on other sites More sharing options...
MrNFL Posted March 24, 2014 Share Posted March 24, 2014 Yes, the code would look nearly the same with just RAM locations changed and ability to use 16-bit numbers. I'll see about writing it up when I get the chance. BTW, I do have a ROM with the Radial code but need to find it on my hard drive (or recompile) and then I'll post it. Any update on this good sir? tommy2teeth 1 Quote Link to comment Share on other sites More sharing options...
Martin Posted July 19, 2014 Share Posted July 19, 2014 I've found two plays where the CPU throw to "non-eligible" players, in MAN vs COM. buck and Knobbe 2 Quote Link to comment Share on other sites More sharing options...
buck Posted July 19, 2014 Share Posted July 19, 2014 I've found two plays where the CPU throw to "non-eligible" players, in MAN vs COM. pro t waggle r & pwr fake z post.jpg Good find. There are also some other plays where it does not seem to be optimized (R&S Pass 2, for example), and some plays where the QB partially scrambles and then throws to someone that's covered. I will make some SET patches for these fixes, eventually. Quote Link to comment Share on other sites More sharing options...
buck Posted July 9, 2015 Share Posted July 9, 2015 (edited) so, what does the QB do when all receivers are covered? it seems like he throws to RB2 or TE. which brings up the question: how can I set this "dump off" receiver for each (or all) play? I would rather QB dump to WR1 or WR2 if all else fails. Edited July 9, 2015 by buck Quote Link to comment Share on other sites More sharing options...
Tecmonster Posted July 9, 2015 Share Posted July 9, 2015 Good question and good proposed solution. Hopefully the prodigal jstout drops by to answer this. Quote Link to comment Share on other sites More sharing options...
bruddog Posted July 9, 2015 Share Posted July 9, 2015 Lmao...cmon guys Its right in the source for the hack about 10 lines down"NO OPEN RECEIVERS SO RANDOM THROW" Quote Link to comment Share on other sites More sharing options...
Tecmonster Posted July 9, 2015 Share Posted July 9, 2015 Lmao...cmon guys Its right in the source for the hack about 10 lines down"NO OPEN RECEIVERS SO RANDOM THROW"I see that, but how can the code be changed to make the QB throw to WR1 instead of random? I can't follow that formatting. Quote Link to comment Share on other sites More sharing options...
bruddog Posted July 9, 2015 Share Posted July 9, 2015 I guess I can spoon feed you the answer....I'm feeling generous...but you must change your name to TecmoLeechMonster. On the first rom post you would do the following SET (0x1DA2C, 0xA08060EAEAEA) LDY #$80 ; use as our indicator to throw to a designated WR RTS ; return NOP NOP NOP SET(0x288C7, 0xC080D005A9034CCB884CC788) CPY #$80 ; check to throw to designated WRBNE NORM ; NO-> do normal COM pass throwLDA #$03 ; LOAD WR 1 player IDJMP $88CB ; jump to different point in COM pass that skips target # to actual player conversion NORM ;JMP $88C7 ; jump to normal point in COM PASS SBlueman and buck 2 Quote Link to comment Share on other sites More sharing options...
Tecmonster Posted July 9, 2015 Share Posted July 9, 2015 but you must change your name to TecmoLeechMonster. Ha, sheesh, come ON, dude! Not only (1) was it buck that first asked, but (2) I give back to this community, including what I think is the 2nd most downloaded rom outside this site's "official" rom, (3) I've donated to you personally, and (4) in last season's rom release thread, I asked downloaders to donate to you using your donate button within the same thread. I don't know how much money that raised for you -- I'm sure not very much -- but whatever it was, was infinitely more than I personally collected from it (which, if you're counting at home, is zero dollars to date). So, in other words, I've decided not to change my name, but I do thank you for the info. I'm anxious to try this out. buck 1 Quote Link to comment Share on other sites More sharing options...
bruddog Posted July 9, 2015 Share Posted July 9, 2015 Mostly just giving you a hard time...but I spent a lot of time learning assembly language so I eventually didn't have to keep asking. Jstout even provided links to very good tutorials. If you spent some time learning the basics of what's going on you could do some small assembly language hacks or at least better understand how the existing ones work. The fact that I can whip out an answer in like 30 minutes is built on XXXXXX hours learning assembly and commenting the rom code/locations. I do appreciate the donations from you and others. In terms of dollars donated/ time spent I've likely been working for much less than a $1 per hour... Anyways hopefully you enjoy it. Quote Link to comment Share on other sites More sharing options...
buck Posted July 10, 2015 Share Posted July 10, 2015 (edited) it sure as heck doesn't seem random to me, but that is beside the point. so, how do these codes this make it "random"? load accumulator $3B? ; is this an address or actual value?logical AND $DC? ; is this an address or actual value?Transfer Accumulator to Y register; store the number?Return from Subroutine ; NO OPEN RECEIVERS SO RANDOM THROWLDA $3BAND $DCTAYRTS Edited July 10, 2015 by buck Quote Link to comment Share on other sites More sharing options...
bruddog Posted July 10, 2015 Share Posted July 10, 2015 Anything that only has a $ is a memory location.#$ indicates a constant$3B,$3C,$3D are the memory locations of random numbers. The random numbers are created by adding prime numbers to the current number. They are updated at least once a frame. Sometimes othe functions re-update them mid frame if "better" randomness is needed. You can watch them update in fceux by slowing the speed way down$DC is memory location that is used as a temporary variable. At this point in the code its holding the total number of pass targets for the play. ANDing the number of targets with a random number means the the value will be restricted to between 0 and the number of targets.However i realized this won't give a truly random result due to how bit wise anding works Quote Link to comment Share on other sites More sharing options...
buck Posted July 10, 2015 Share Posted July 10, 2015 However i realized this won't give a truly random result due to how bit wise anding works I realized it wasn't random before I even looked at the code. Mostly because I have never seen it "randomly" throw to either WR1 or WR2. It mostly dumps it to RB2. is there an easy fix (that will fit in existing space) to make it actually random? Quote Link to comment Share on other sites More sharing options...
bruddog Posted July 10, 2015 Share Posted July 10, 2015 Buck..your observation isn't correct either. I made it so it would be random every play the way its currently written every time to test it. For shotgun pass 3 for example it will throw to WR 1 often. For 5 WR patterns it will either throw to TARGET 1 or TARGET 5. For 4 WR patterns it will throw to ANY OF THE 4 possible targetsFor 3 WR patterns it will throw to TARGET 1 or TARGET 3. The order of the targets is not the same for each play so sometimes target 1 is WR1 sometimes it is RB1 etc. For example in one short test of BUF vs MIA the com threw to WR1, WR2, WR2, RB2, RB1. It depends on what plays are used. Yes there should be a way to make it completely random... buck 1 Quote Link to comment Share on other sites More sharing options...
buck Posted July 10, 2015 Share Posted July 10, 2015 Buck..your observation isn't correct either. I made it so it would be random every play the way its currently written every time to test it. For shotgun pass 3 for example it will throw to WR 1 often. For 5 WR patterns it will either throw to TARGET 1 or TARGET 5. For 4 WR patterns it will throw to ANY OF THE 4 possible targets For 3 WR patterns it will throw to TARGET 1 or TARGET 3. The order of the targets is not the same for each play so sometimes target 1 is WR1 sometimes it is RB1 etc. For example in one short test of BUF vs MIA the com threw to WR1, WR2, WR2, RB2, RB1. It depends on what plays are used. Yes there should be a way to make it completely random... cool. Quote Link to comment Share on other sites More sharing options...
Tecmonster Posted July 10, 2015 Share Posted July 10, 2015 Bruddog's code that designates WR1 as the fallback receiver seems to work really well. In my opinion, it's definitely an improvement on jstout's original hack. Good job, bruddog. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.