jstout Posted March 15, 2013 Share Posted March 15, 2013 (edited) View attachment: Original_CPU_Passing.nesView attachment: Original_CPU_Passing_Juiced.nes .define X_DISTANCE $DD.define Y_DISTANCE $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 START:LDY #$00 ; SET TO FIRST COMMAND BYTETYAPHA@NEXT_RECEIVER:PLATAY; CHECK FOR NO MORE RECEIVERSCPY $DCBCC @CONTINUEBEQ @CONTINUE; NO OPEN RECEIVERS SO RANDOM THROWLDA $3BAND $DCTAYRTS@CONTINUE:INY ; SET TO NEXT RECEIVER ; FIND X DISTANCELDA ($3E),YAND #$F0LSRSTA X_DISTANCE ; DISTANCE * 8 PIXELSBNE @Y_GETJMP @EXIT @Y_GET:; FIND Y DISTANCELDA ($3E),YAND #$F0LSRLSRLSRLSRSTA Y_DISTANCEASLASLCLCADC Y_DISTANCESTA Y_DISTANCE ; DISTANCE * 5 PIXELS ; GET RECEIVER LOCATIONLDA ($3E),YAND #$0FASLTAXTYAPHA;LDY #$08LDA ($AE),YBMI @2PLDA $DEEB,XSTA RECEIVER_LOLDA $DEEC,XSTA RECEIVER_HIJMP @DEFENDER@2P:LDA $DF01,XSTA RECEIVER_LOLDA $DF02,XSTA RECEIVER_HI @DEFENDER:; GET DEFENDER LOCATIONLDX #$14@NEXT_DEFENDER:LDY #$08LDA ($AE),YBMI @1PLDA $DF01,XSTA DEFENDER_LOLDA $DF02,XSTA DEFENDER_HIJMP @CALC@1P:LDA $DEEB,XSTA DEFENDER_LOLDA $DEEC,XSTA DEFENDER_HI @CALC:; FIND X SIDELDY #$15LDA (RECEIVER_LO),YCMP (DEFENDER_LO),YBCC @RIGHT ; RECEIVER < DEFENDERBNE @LEFT ; RECEIVER > DEFENDERDEYLDA (RECEIVER_LO),YCMP (DEFENDER_LO),YBCC @RIGHT ; RECEIVER < DEFENDER ; RECEIVER > DEFENDER ; X DISTANCE CHECK@LEFT:LDY #$14LDA (RECEIVER_LO),YSECSBC (DEFENDER_LO),YSTA X_LO_APARTINYLDA (RECEIVER_LO),YSBC (DEFENDER_LO),YSTA X_HI_APARTJMP @XAPART @RIGHT:LDY #$14LDA (DEFENDER_LO),YSECSBC (RECEIVER_LO),YSTA X_LO_APARTINYLDA (DEFENDER_LO),YSBC (RECEIVER_LO),YSTA X_HI_APART @XAPART:LDA X_HI_APARTBNE @GOOD ; VERY LARGE DISTANCELDA X_LO_APARTCMP X_DISTANCEBCS @GOOD ; OUT OF X DISTANCE ; IN X DISTANCE = CHECK Y DISTANCE ; Y DISTANCE CHECK@TOP_BOTTOM:LDY #$17LDA (RECEIVER_LO),YCMP (DEFENDER_LO),YBCC @BOTTOM ; RECEIVER < DEFENDER ; RECEIVER > DEFENDER @TOP:LDA (RECEIVER_LO),YSECSBC (DEFENDER_LO),YCMP Y_DISTANCEJMP @YAPART @BOTTOM:LDA (DEFENDER_LO),YSECSBC (RECEIVER_LO),YCMP Y_DISTANCE @YAPART:BCC @NEXT ; IN Y DISTANCE = BAD THROW@GOOD:DEXDEXBMI @THROW ; OPENJMP @NEXT_DEFENDER@NEXT:JMP @NEXT_RECEIVER @THROW:PLATAY@EXIT:RTS Set Default Values:PRO T WAGGLE L = 93 54 22R AND S FLARE C = 94 83 75 52 21PRO T WAGGLE R = 63 54 21ROLL OUT R = 94 63 45 31ROLL OUT L = 93 74 45 22T PLAY ACTION D = 93 73 42 21PRO T SCREEN L = 93 54 45 21PLAY ACTION = 93 54 42PWR FAKE Z POST = 94 53 31WTE F-FLICKER = 93 84SHOTGUN X CURL = 63 64 45 42 21R AND S Z FLY = 94 92 53 55PRO T FLARE D = 94 73 45 22 21OFFSET FLARE E = 94 63 41 32ONEBACK Z CROSS = 93 92 44 31ONEBACK FLARE A = 94 53 42T FLEA FLICKER = 93 54 22PWR FAKE X FLY = 93 94 55 31SHOTGUN X DRIVE = 93 54 AND 93 95 54 61 22R AND S 3-WING = 93 94 72 55PLAYACTION Z IN = 93 51 54 42FLEA FLICKER = 94 53 32PRO T FLARE C = 93 75 64 42SHOTGUN 3-WING = 93 74 52 45 31SHOTGUN XY BOMB = 93 94 81 75 62R AND S Y UP = 93 95 84 42 21X OUT AND FLY = 94 83 55 32 31REV-FAKE Z POST = 94 51SLOT L Z DRIVE = 83 54 AND 83 71 54 45 22NO BACK X DEEP = 94 72 53 21SHOTGUN Z S-IN = 73 44 AND 95 73 62 44 21REDGUN Z SLANT = 94 95 52 43 31;---------------x90 COMMAND:FIRST NIBBLE (BOX DISTANCE) SECOND NIBBLE (RECEIVER): (8 Pixels = 1 Yard)0 = 0 PIXELS LEFT AND RIGHT + 0 PIXELS UP AND DOWN (Forces Throw)1 = 8 PIXELS LEFT AND RIGHT + 5 PIXELS UP AND DOWN2 = 16 PIXELS LEFT AND RIGHT + 10 PIXELS UP AND DOWN3 = 24 PIXELS LEFT AND RIGHT + 15 PIXELS UP AND DOWN4 = 32 PIXELS LEFT AND RIGHT + 20 PIXELS UP AND DOWN5 = 40 PIXELS LEFT AND RIGHT + 25 PIXELS UP AND DOWN6 = 48 PIXELS LEFT AND RIGHT + 30 PIXELS UP AND DOWN7 = 56 PIXELS LEFT AND RIGHT + 35 PIXELS UP AND DOWN8 = 64 PIXELS LEFT AND RIGHT + 40 PIXELS UP AND DOWN9 = 72 PIXELS LEFT AND RIGHT + 45 PIXELS UP AND DOWNA = 80 PIXELS LEFT AND RIGHT + 50 PIXELS UP AND DOWNB = 88 PIXELS LEFT AND RIGHT + 55 PIXELS UP AND DOWNC = 96 PIXELS LEFT AND RIGHT + 60 PIXELS UP AND DOWND = 104 PIXELS LEFT AND RIGHT + 65 PIXELS UP AND DOWNE = 112 PIXELS LEFT AND RIGHT + 70 PIXELS UP AND DOWNF = 120 PIXELS LEFT AND RIGHT + 75 PIXELS UP AND DOWN View full article Edited March 15, 2013 by jstout DFM, buck, Bodom and 2 others 5 Quote Link to comment Share on other sites More sharing options...
DFM Posted March 15, 2013 Share Posted March 15, 2013 This is intense. Quote Link to comment Share on other sites More sharing options...
buck Posted March 15, 2013 Share Posted March 15, 2013 gosh. I will test out some MAN v COM.so, can this hack be applied to any TSB ROM (including 32-team)? Quote Link to comment Share on other sites More sharing options...
jstout Posted March 15, 2013 Author Share Posted March 15, 2013 gosh. I will test out some MAN v COM. so, can this hack be applied to any TSB ROM (including 32-team)? This can be applied to any rom including the 32-team roms. If there is playbook changes then the made code will work but all the x90 commands for the offense need to be altered to adhere to the new format. The code above is x1DA20-x1DAF9 and the code to jump to it is x288BE-x288D6 (only other changes are the 90 commands values for the plays) Quote Link to comment Share on other sites More sharing options...
buck Posted March 15, 2013 Share Posted March 15, 2013 I was just playing on save staves against RAMS, it seems to be working great - I knew what play they were running and would go cover different receivers - the QB would throw to the open guy. regarding the new "90 commands" - what does a higher value "first nibble" mean? does it mean that they can be "less open" and still be thrown to? Quote Link to comment Share on other sites More sharing options...
jstout Posted March 15, 2013 Author Share Posted March 15, 2013 (edited) I was just playing on save staves against RAMS, it seems to be working great - I knew what play they were running and would go cover different receivers - the QB would throw to the open guy. regarding the new "90 commands" - what does a higher value "first nibble" mean? does it mean that they can be "less open" and still be thrown to? The higher the first nibble the more open they need to be. Example 13 and A3, 13 would need the WR1 to be open with about 1 yard surrounding him on all sides to be open while A3 would need about 10 yards to his left and right and 6 yards to his top and bottom to be open The original play code looked like: 91 73 F4 42 B8 91 = 2 Receivers 73 = 46% chance of throwing to 3 (WR1) F4 = 100% chance of throwing to 4 (WR2) (if not thrown to 3) 42 B8 = pointer to change control to receiver while the new code replaces the receivers chance of being thrown to with the value of how much space needs to open around him. Edited March 15, 2013 by jstout Quote Link to comment Share on other sites More sharing options...
GameplayLoop Posted March 15, 2013 Share Posted March 15, 2013 The Priority Code for the QB was one of my favorite pieces of information acquired (by Jstout) early on in the development of Tecmo Super Coach. It allowed me to personalize pressured releases, scramble rate, and 'intelligence' of the QB. This now bumps up the QB 'smarts' x 10. Well done, Jstout. Awesome stuff. bob sacamano 1 Quote Link to comment Share on other sites More sharing options...
bruddog Posted March 15, 2013 Share Posted March 15, 2013 This is awesome. A huge step up from even weighted random. I should revisit my formulas that tried to determined if a WR was open or not to create some rule of thumbs depending on the the final destination of the pattern. This is obvious but the closer to the line of scrimmage the WR stops his pattern at the smaller "box distance" you want to set. The "box distance" doesn't increase linearlysince WR's that run longer patterns the defender will have more time to accelerate to and run at top speed. For a rom that is primarily designed for COA vs COA or COM vs COM the box distances can be set smaller. For MAN it has to be larger so that a man can't easily "bait" the QB's into throws. bob sacamano 1 Quote Link to comment Share on other sites More sharing options...
Tecmonster Posted March 15, 2013 Share Posted March 15, 2013 Wow, I've been saying that if someone could finally do this, then the computer would finally start giving good players legit competition. This hack + juice is going to revolutionize MAN vs. COM play, and COA vs. COA. The computer already knows how to run in most cases. Now it can pass smartly . . . awesome. I tested this in MANvs.COM, MANvs.COA, and COAvs.COA, and it was perfect. That's not to say the QB's performed perfectly, but they shouldn't. Very often, the best NFL QB's don't see open WR's. Under pressure especially, the QB's will still throw into coverage but that's also realistic. The ONLY thing I might add to this hack is if the QB's first two receivers are covered and he has a 31 or better MS, then scramble. Definitely not necessary though. Great job! I hope this can be applied to Drummer's rom. bob sacamano 1 Quote Link to comment Share on other sites More sharing options...
buck Posted March 16, 2013 Share Posted March 16, 2013 This is obvious but the closer to the line of scrimmage the WR stops his pattern at the smaller "box distance" you want to set. The "box distance" doesn't increase linearly since WR's that run longer patterns the defender will have more time to accelerate to and run at top speed. This is a good point bob sacamano 1 Quote Link to comment Share on other sites More sharing options...
tecmobo Posted March 16, 2013 Share Posted March 16, 2013 JStout > all. bob sacamano and bruddog 2 Quote Link to comment Share on other sites More sharing options...
bob sacamano Posted March 16, 2013 Share Posted March 16, 2013 Awesome find for the Tecmo community. Kudos JStout! Quote Link to comment Share on other sites More sharing options...
DrunkenGamer Posted March 16, 2013 Share Posted March 16, 2013 This is awesome!! So have you figured out how the COM "looks" for players? Would love to add this to our TSB3 logic we applied. With what we added in player AI and this... my head is spinning! Quote Link to comment Share on other sites More sharing options...
TeBowl_Time Posted March 16, 2013 Share Posted March 16, 2013 This is HUGE! Quote Link to comment Share on other sites More sharing options...
Bodom Posted March 17, 2013 Share Posted March 17, 2013 Wow - this is bad ass. Quote Link to comment Share on other sites More sharing options...
jstout Posted March 17, 2013 Author Share Posted March 17, 2013 (edited) 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 Edited March 17, 2013 by jstout Quote Link to comment Share on other sites More sharing options...
TheRaj Posted March 18, 2013 Share Posted March 18, 2013 Dude this is AWESOME! I just watched a COM vs COM game and sure enough he is through to them open guys alot more now. Can't wait to test more AWESOME JOB MAN!!!!! DFM 1 Quote Link to comment Share on other sites More sharing options...
jesseguild5 Posted March 23, 2013 Share Posted March 23, 2013 sorry im new to this, how do i apply this to my 32 team rom? Quote Link to comment Share on other sites More sharing options...
quince3800 Posted April 21, 2013 Share Posted April 21, 2013 I'm thinking that this might be entirely too much to consider, but has anyone thought of a means to have the QB throw the ball away? Quote Link to comment Share on other sites More sharing options...
buckbbuck Posted April 22, 2013 Share Posted April 22, 2013 How and where does one implement this code into a ROM that already exists? Is that possible? Is there a SET command? Quote Link to comment Share on other sites More sharing options...
Tecmonster Posted June 28, 2013 Share Posted June 28, 2013 I echo jesseguild and buckbbuck's questions: how do we get this into a rom? Is there an ips patch? That programming language above is foreign to me. Quote Link to comment Share on other sites More sharing options...
buck Posted June 28, 2013 Share Posted June 28, 2013 I echo jesseguild and buckbbuck's questions: how do we get this into a rom? Is there an ips patch? That programming language above is foreign to me. make a patch! download original NES TSB rom, download jstouts first rom of the first post. make a patch. apply patch to whatever. Quote Link to comment Share on other sites More sharing options...
Tecmonster Posted June 29, 2013 Share Posted June 29, 2013 make a patch! download original NES TSB rom, download jstouts first rom of the first post. make a patch. apply patch to whatever. Thanks, I guess I should ask for SET commands instead though. I made a patch and applied it to the TB.org 2013 version of the game and it ended up changing player names, positions, etc. too. Quote Link to comment Share on other sites More sharing options...
buck Posted June 29, 2013 Share Posted June 29, 2013 Thanks, I guess I should ask for SET commands instead though. I made a patch and applied it to the TB.org 2013 version of the game and it ended up changing player names, positions, etc. too. you must have done something wrong, then. this looks like a regular 28-team original NES TSB rom with this hack applied. you need to use the original 1991 NES TSB unmodified rom to make your patch Quote Link to comment Share on other sites More sharing options...
buck 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 GameplayLoop 1 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.