Jump to content

  • Log in with Facebook Log in with Twitter Log In with Google      Sign In   
  • Create Account

facebook youtube twitter


Search Articles


Recent Status Updates

View All Updates

Recent Posts

Recent Topics

2021 WTF Bowl Streamed Live Tonight Midnight EST

Online Leagues Lounge 30 Aug 2014
We should start around Midnight EST/9PM PST or sometime soon after. You can view it on my twitch channel
Full topic ›

TSB III Glitch-a-thon

Tecmo Super Bowl III 30 Aug 2014
Thought we could make a thread compiling all the glitches we've discovered from this game. This place is the only thing on the internet I know of that has experience and lists these glitches. I think we can find enough glitches in this game to give some of those well known glitch fest games a run...
Full topic ›

More Tecmo weirdness...

Tecmo Super Bowl III 29 Aug 2014
Here's one I hadn't seen: I'm playing through 1976 vs COM with the Legacy League rosters, and as time runs out in the 1st half, my Rams QB James Harris heaves one deep for a covered Ron Jessie in the end zone. The ball appears to bounce(or be batted)out of his hands and fall to the turf, but I'm...
Full topic ›

BEING DON MAJKOWSKI.

Off-Topic 29 Aug 2014
  I've been having a lot of fun cruising around this website (I'm new) and checking out all the cool forums and player discussions. As you can tell from my user name and avatar, my favorite player in the history of TSB is "The Majik Man" Don Majkowski.  I actually hate the Packers in r...
Full topic ›

"Farva Bowl II" Carthage Texas 9/13/14

Live Tournaments 29 Aug 2014
Game: Tecmo Bowl System: NES DOUBLE ELIMINATION 9/13/14 at 10am $5.00 Entry Fee World Cup Style Tournament Trophy for 1st Place Refreshments available at cinema Location: Carthage Twin Cinema 1120 W. Panola St Carthage, TX 75633 Interested parties should text only at 903-690-2567 or email your...
Full topic ›
- - - - -

CPU Find Open Receiver

AI

My notes for updating the 90 Command to allow the CPU to throw to open receivers rather than randomly. In short, the COM looks at each receiver one by one throwing to the first open receiver it finds. Open is defined as no defender within a specified distance from the receiver. The first nibble is the amount of distance to look and the second nibble is the receiver.

As of the moment, the COA and COM games seem improved in receiver choice. The MAN vs COM has been hard to tell as all or most receivers tend to be covered. I would love to hear input for both COA/COM vs COA/COM and MAN vs COM and any plays where I need to edit the default values (I might have the default size too large right now for playing against MAN).
View attachment: Original_CPU_Passing.nes
View 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 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 X DISTANCE
LDA ($3E),Y
AND #$F0
LSR
STA X_DISTANCE ; DISTANCE * 8 PIXELS
BNE @Y_GET
JMP @EXIT
 
@Y_GET:
; FIND Y DISTANCE
LDA ($3E),Y
AND #$F0
LSR
LSR
LSR
LSR
STA Y_DISTANCE
ASL
ASL
CLC
ADC Y_DISTANCE
STA Y_DISTANCE ; DISTANCE * 5 PIXELS
 
; GET RECEIVER LOCATION
LDA ($3E),Y
AND #$0F
ASL
TAX
TYA
PHA
;
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
@NEXT_DEFENDER:
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
BNE @GOOD		  ; VERY LARGE DISTANCE
LDA X_LO_APART
CMP X_DISTANCE
BCS @GOOD		  ; OUT OF X DISTANCE
				   ; IN X DISTANCE = CHECK Y DISTANCE
 
; Y DISTANCE CHECK
@TOP_BOTTOM:
LDY #$17
LDA (RECEIVER_LO),Y
CMP (DEFENDER_LO),Y
BCC @BOTTOM	    ; RECEIVER < DEFENDER
				   ; RECEIVER > DEFENDER
 
@TOP:
LDA (RECEIVER_LO),Y
SEC
SBC (DEFENDER_LO),Y
CMP Y_DISTANCE
JMP @YAPART
 
@BOTTOM:
LDA (DEFENDER_LO),Y
SEC
SBC (RECEIVER_LO),Y
CMP Y_DISTANCE
 
@YAPART:
BCC @NEXT		  ; IN Y DISTANCE = BAD THROW
@GOOD:
DEX
DEX
BMI @THROW		 ; OPEN
JMP @NEXT_DEFENDER
@NEXT:
JMP @NEXT_RECEIVER
 
@THROW:
PLA
TAY
@EXIT:
RTS

Set Default Values:

PRO T WAGGLE L = 93 54 22
R AND S FLARE C = 94 83 75 52 21
PRO T WAGGLE R = 63 54 21
ROLL OUT R = 94 63 45 31
ROLL OUT L = 93 74 45 22
T PLAY ACTION D = 93 73 42 21
PRO T SCREEN L = 93 54 45 21
PLAY ACTION = 93 54 42

PWR FAKE Z POST = 94 53 31
WTE F-FLICKER = 93 84
SHOTGUN X CURL = 63 64 45 42 21
R AND S Z FLY = 94 92 53 55
PRO T FLARE D = 94 73 45 22 21
OFFSET FLARE E = 94 63 41 32
ONEBACK Z CROSS = 93 92 44 31
ONEBACK FLARE A = 94 53 42

T FLEA FLICKER = 93 54 22
PWR FAKE X FLY = 93 94 55 31
SHOTGUN X DRIVE = 93 54 AND 93 95 54 61 22
R AND S 3-WING = 93 94 72 55
PLAYACTION Z IN = 93 51 54 42
FLEA FLICKER = 94 53 32
PRO T FLARE C = 93 75 64 42
SHOTGUN 3-WING = 93 74 52 45 31

SHOTGUN XY BOMB = 93 94 81 75 62
R AND S Y UP = 93 95 84 42 21
X OUT AND FLY = 94 83 55 32 31
REV-FAKE Z POST = 94 51
SLOT L Z DRIVE = 83 54 AND 83 71 54 45 22
NO BACK X DEEP = 94 72 53 21
SHOTGUN Z S-IN = 73 44 AND 95 73 62 44 21
REDGUN 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 DOWN
2 = 16 PIXELS LEFT AND RIGHT + 10 PIXELS UP AND DOWN
3 = 24 PIXELS LEFT AND RIGHT + 15 PIXELS UP AND DOWN
4 = 32 PIXELS LEFT AND RIGHT + 20 PIXELS UP AND DOWN
5 = 40 PIXELS LEFT AND RIGHT + 25 PIXELS UP AND DOWN
6 = 48 PIXELS LEFT AND RIGHT + 30 PIXELS UP AND DOWN
7 = 56 PIXELS LEFT AND RIGHT + 35 PIXELS UP AND DOWN
8 = 64 PIXELS LEFT AND RIGHT + 40 PIXELS UP AND DOWN
9 = 72 PIXELS LEFT AND RIGHT + 45 PIXELS UP AND DOWN
A = 80 PIXELS LEFT AND RIGHT + 50 PIXELS UP AND DOWN
B = 88 PIXELS LEFT AND RIGHT + 55 PIXELS UP AND DOWN
C = 96 PIXELS LEFT AND RIGHT + 60 PIXELS UP AND DOWN
D = 104 PIXELS LEFT AND RIGHT + 65 PIXELS UP AND DOWN
E = 112 PIXELS LEFT AND RIGHT + 70 PIXELS UP AND DOWN
F = 120 PIXELS LEFT AND RIGHT + 75 PIXELS UP AND DOWN
  • 0


36 Comments

Photo
davefmurray
Mar 15 2013 04:35 PM

This is intense.

    • 0

gosh.  

I will test out some MAN v COM.

so, can this hack be applied to any TSB ROM (including 32-team)?

    • 0

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)

    • 0

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?

    • 0

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.

    • 0
Photo
Maynard_G_Krebs
Mar 15 2013 05:36 PM

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.

    • 1

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 linearly

since 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. 

    • 1

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.

    • 1

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

    • 1

JStout > all.

    • 3

Awesome find for the Tecmo community.  Kudos JStout!

    • 0
Photo
drunken_honkey
Mar 16 2013 01:02 PM
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!
    • 0
Photo
TeBowl_Time
Mar 16 2013 01:41 PM

This is HUGE!

    • 0

Wow - this is bad ass.

    • 0

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
    • 0

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!!!!!

    • 1
Photo
jesseguild5
Mar 22 2013 07:56 PM

sorry im new to this, how do i apply this to my 32 team rom?

    • 0

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?

    • 0

How and where does one implement this code into a ROM that already exists? Is that possible? Is there a SET command?

    • 0

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.

    • 0

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.

    • 0

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. 

    • 0

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

    • 0

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.

 

Attached File  JSTOUT COM PASSING HACK.ips   568bytes   119 downloads

 

    • 1

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.

 

attachicon.gifJSTOUT 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. 

    • 0