Tee'd Off - A Saucy Secret and Hidden Dev Credits (NSFW)

A Tecmo game featuring boobs? Why, that’s simply unheard of!
WARNING: This article is slightly NSFW. Low-resolution pixelated breasts within.
I was discussing Tecmo game history with a Japanese acquaintance on twitter a couple days ago (regarding a certain long-awaited but forthcoming article), and he mentioned something tangentially related:
There’s a Tecmo trackball-based golf game called Tee’d Off, and supposedly during its development, every time you got a hole-in-one, the girl would take off her clothes. Someone found the graphics in the game data, but their account is now private. It seems the guys at the Tecmo office at that time had the nude version. Anyway, it’s practically become an urban legend in Japan, so you may want to investigate that. It could be big news.
Well, that is downright intriguing. Let me just drop everything and have a look real quick.


The game does prominently feature a young blonde girl who is apparently our caddie, sporting a red top with a white collar and a Tecmo logo. She is decidedly not naked however.


She also appears on the score card screen, where her animation varies depending on your score. For par, you’ll get a wink from Caddie-chan. Under par, a blown kiss and a wink. And for a hole in one or 3+ under par, a kiss, a wink, and floating hearts. But no matter your score, her top remains in firmly in place.
2026 UPDATE - The World Version
Not too long after this article was published, a different version of Tee’d Off appeared and was added to MAME. I’ve finally sat down and taken the time to compare them and… oh boy.
From here you can skip down and read the rest of the original chain of research around the girl and her graphics if you’d like, but to summarize: she does indeed have topless graphics, but they are not used by any code and not accesible without hacking. In fact, the tilemap thet arranges the graphics is broken, requiring a patch to display properly. Based on the “urban legend,” we supposed that the topless artwork was the reward for getting a hole in one or ≥3 under par, but the concept was cut at some point. Along the way we also discovered a huge developer easter egg in the form of a hidden staff roll. That staff roll has code that should have featured the girl at the end, but instead displayed a blank screen as it pointed to invalid data.
Now that you’re up to speed, let’s compare the two dumps.
The original set is Japan region, while the newer set is “not-Japan” - respectively based on the existence and non-existence of a “For use in Japan only” warning screen. As such, the original set was renamed to teedoffj while the newer one took its place as teedoff.
The MAME source includes a comment that the new set was found in the US, but as there is nothing in it to indicate a specific region, they went with a World designation, and that’s how we’ll refer to it.
Another notable difference is the date: the Japan set has a date of 1986 on the title screen while the World set has 1987.
After some analysis, we identified three major changes in the World version:
Re-Tuned Ball Hit Strength
The hit-strength ramp tables were reworked. The same range of values is sampled more coarsely (from 113 steps to 97) so a given trackball input lands further up the ramp and launches the ball anywhere from 10 to 20% harder. The distance responds to launch strength roughly as its square, so that modest increase compounds through into a shot that travels a little over twice as far. The cap was lowered too: the game clamps the strength index well short of the end of the ramp, limiting a full-power shot to about 92% of what the Japan version could reach (which makes sense if your balls are going farther on what is less actual physical strength on the trackball).
It’s best understood with a visual example:
You can see how the World version goes farther in controlled conditions. This is the result of the hit strength tuning.
Re-Recorded Dialogue
There are two vocal clips in the game of a young lady (presumably our Caddie-chan) saying “Nice Shot” and “Nice On.”
Japan
World
The clips in the Japan version are spoken quicky and in a thick katakana-english accent, with reverb applied. It feels a bit muddy.
The World version, however, has her speak a little slower and enunciate better. There is still some Japanese accent, but it’s much clearer and resonant.
Rectified Staff Roll
The hidden staff roll had a couple small amendments. The PLANNER title became PLANNING; SHINICHIROU became SHINICHIROH to match the same romanization as SAITOH earlier in the list; INOKOSI became INOKOSHI; and finally, an addition of COPYRIGHT 1987. Nothing major, just some standardization and a copyright.
Wait, they updated the hidden easter egg? Does that mean…?
Restored Breasts
Now we get to the real interesting piece.
The remaining mysteries from the original analysis of the Japan set were:
- the topless graphics existed, but the tilemap that displayed them was broken, possibly half-finished or half-removed
- the topless graphics/tilemap were not used by any code, so it was impossible to know exactly context they were displayed
- the Game Over screen after the secret staff roll displayed a unique “I Love You” string and called the code to display Caddie-chan, but referenced a non-existent entry in her animation table which resulted in her not actually appearing
The World version answers all of these at once.
It turns out the nudity is not a bonus for a hole in one; in fact, you’ll never see it during gameplay at all.
It is intended to be part of the hidden easter egg only.

Yes, the World version has the boobs fixed and fully implemented in the code, restoring them to their rightful glory. The broken tilemap is fixed, the 9th entry in her animation table is present, and there is even additional code at 0x1EC4 on the sub CPU side that arranges the smaller hearts into a larger heart around her.
This means that the nudity is accessible without any hacking on the World version. You simply need to activate the easter egg.
So… there we have it. The truth of Tee’d Off’s titties has been fully exposed, once and for all.
What Does It Mean?
This is all kind of crazy. I went into this expecting the World version to have minimal changes and to not have more than a sentence or two to write about. Instead we have gameplay changes, content updates, and fixes to a developer easter egg.
It raises the question: are these just regional changes or a later revision? Is the Japanese version a location test or (dare I say it…) a prototype of some sort?
It’s hard to say. It could be argued that the changes to hit strength and dialogue audio are localization, but they could just as easily be a newer revision and we happen to only dumps of two revisions split across region as well.
The only thing that can be stated as a fact is that the World version is a later release due to the easter egg bugfixes and, more bluntly, the subsequent year on its title screen.
I lean towards our Japanese dump being some kind of pre-release. The fact that the easter egg is straight up broken is a sign that they weren’t done with everything, that they had enough time to work in this bit of hidden content but then had to cut a release quickly for a trade show or location test or something like that. And the World version has an updated year, which is not something you usually see on a regional varient, but on a newer revision. That would make the World version we have the full release then and implies there is a similarly final Japanese version floating around out there somewhere.
But who knows. Might just be my obsession with prototypes talking.
In any case, that concludes the 2026 update and the analysis of the newer World dump. The rest of the article is the original from nearly 4 years ago. If it’s your first time seeing this article, feel free to skip the boobs part since that is now solved, but check out the staff roll section below it.
In Search of Lost Boobs
It seems this urban legend does have some real merit. There are indeed graphics for this young lady in a state of immodesty within the character ROM, and they’re easy to spot.

That’s a promising start to unraveling this mystery. The graphics remain, but does the code/data actually reference them?
After a few hours of reverse engineering, we find that the tilemaps for Caddie-chan’s graphics are located in the sub CPU ROM, referenced in rudimentary animation scripts that contain simple positioning and timing information. Those scripts are then referenced in a pointer table at 0x174D.
ptrtblGirlAnims
ram:174d addr spranimHoleInOne
; index 0 is for under par
ram:174f addr spranimHoleInOne
; index 1 is for 3 under par or hole in one
ram:1751 addr spranimPar
; wink
ram:1753 addr spranimUnderPar
; blows kiss
ram:1755 addr spranimGameOver
; waving
ram:1757 addr spranimCourseIntro
ram:1759 addr spranimCourseIntroHandAnim
ram:175b addr spranimCourseIntroKiss
; shown at the end of the course intros
Notice the first two entries which point to the same data. These are the animation scripts for under par and for hole in one. Both of these are the blow kiss/wink animation on the scorecard screen, with the only difference being that hole-in-one has includes floating hearts while under par does not.
But those floating hearts are not part of the animation scripts or tilemaps. Instead they are animated in the subroutine at 0x1DC6 in the sub CPU ROM, which checks bit 0 of 0xCAA0. This routine is called whenever the girl is on screen, so we can make the hearts appear any time we wish, regardless of the graphic used.

I say all that to emphasize the next point, which is that there’s no reason to have two animation script slots since the only difference is the hearts, and the hearts have nothing to do with the animation script itself.
If there was only one animation planned for both under par/hole-in-one from the start, they could both use that same slot. The existence of two slots implies that there could have been a different animation script in place for either under par or for hole-in-one at one time.
And remember the “urban legend” we’re investigating: that she appeared nude when scoring a hole-in-one.
So aside from the existence of the nude graphics, which proves that there certainly were boobs in the game, we have some possible evidence indicating support for the rumor of how those boobs were revealed.
A bit of digging around the data and we find there are four unused tilemaps. Forcing them to load, we get…




There she is, bearing her laser-red nipples to the world.
The first map is obviously a little broken, and the second map also has a tile a little bit out of place. I don’t have a good explanation for why this is, unfortunately. The randomness of it would make me think perhaps a bad dump of the data, but I would expect to see issues in other parts of the game if that were the case. Perhaps the source data was damaged along the way and no one noticed since it had been removed. I’m really not sure.
But even with the broken image, we can see she’s doing the blowing kiss animation, further lending credence to this being shown after a hole in one. The broken tilemaps are relatively simple to fix, so it looks like we have everything we need to restore the nudity.
Almost. One thing that is notably missing is the animation script. We can’t just modify the existing one since, as mentioned above, it is shared between the hole-in-one and under par states. (Or, probably more accurately, the hole-in-one animation was removed and now points to the under par animation.)
Our only option is to copy and modify the existing animation. Once again, not too difficult. There’s some unused space towards the end of the ROM, so we’ll set it up there.
Let’s put it all together into a MAME cheat:
<cheat desc="Change hole in one/3 under par girl graphics (NSFW)">
<script state="on">
<!--fix the broken wave frame-->
<action>temp2=sub.mb@1b3a</action>
<action>sub.mb@1b3a=13</action>
<action>temp3=sub.mb@1b3e</action>
<action>sub.mb@1b3e=23</action>
<action>temp4=sub.mb@1b82</action>
<action>sub.mb@1b82=43</action>
<action>temp5=sub.mb@1b77</action>
<action>sub.mb@1b77=97</action>
<!--fix the broken kiss frame-->
<action>temp6=sub.mw@1bbc</action>
<action>sub.mw@1bbc=3433</action>
<!--anim script based on existing one-->
<action>sub.mw@7d00=8718</action>
<action>sub.mb@7d02=01</action>
<action>sub.mw@7d03=1b0e</action>
<action>sub.mb@7d05=78</action>
<action>sub.mw@7d06=1c67</action>
<action>sub.mb@7d08=05</action>
<action>sub.mw@7d09=1b85</action>
<action>sub.mb@7d0b=20</action>
<action>sub.mw@7d0c=1c67</action>
<action>sub.mb@7d0e=02</action>
<action>sub.mw@7d0f=1bf4</action>
<action>sub.mb@7d11=20</action>
<action>sub.mw@7d12=1cda</action>
<action>sub.mb@7d14=05</action>
<action>sub.mw@7d15=1ce5</action>
<action>sub.mb@7d17=05</action>
<action>sub.mw@7d18=1cf0</action>
<action>sub.mb@7d1a=05</action>
<action>sub.mw@7d1b=1cfb</action>
<action>sub.mb@7d1d=01</action>
<action>sub.mw@7d1e=0</action>
<!--repoint the table entry for hole in one to our anim-->
<action>temp1=sub.mw@174f</action>
<action>sub.mw@174f=7d00</action>
</script>
<script state="off">
<action>sub.mw@174f=temp1</action>
<action>sub.mb@1b3a=temp2</action>
<action>sub.mb@1b3e=temp3</action>
<action>sub.mb@1b82=temp4</action>
<action>sub.mb@1b77=temp5</action>
<action>sub.mw@1bbc=temp6</action>
<action>sub.mq@7d00=ffffffffffffffff</action>
<action>sub.mq@7d08=ffffffffffffffff</action>
<action>sub.mq@7d10=ffffffffffffffff</action>
<action>sub.mq@7d18=ffffffffffffffff</action>
</script>
</cheat>
And there we have it:


So it seems there was some truth to that “urban legend” after all: there is indeed nudity in the game data, which was probably originally accessible in a location test version and which almost certainly was displayed when achieving a hole-in-one shot, but references to the data have been replaced in the final version.
But wait, there’s more…
Hidden Staff Roll
The first thing that actually caught my eye when I first started disassembling the game was the group of messages at 0x2FBF in the main CPU ROM:
2fbf addr s__SEE_YOU_AGAIN!_ram_2fc9
; = " SEE YOU AGAIN! "
2fc1 addr s__BYE-BYE!_ram_2fe1
; = " BYE-BYE! "
2fc3 addr s__THANK_YOU!_ram_2ff9
; = " THANK YOU! "
2fc5 addr s__COME_AND_SEE_US_AGAIN!_ram_3011
; = " COME AND SEE US AGAIN!"
2fc7 addr s__I_LOVE_YOU!_ram_3029
; = " I LOVE YOU! "
The first four lines are displayed on the game over screen and are implied to be emoted by our young lady who also appears there. The messages change as you progress further through the courses, but the amorous “I Love You!” line is never used. Such a phrase would certainly match the titillating scene I was searching for, so I looked into that first.
It turns out there’s a check at 0x2F75 in the main CPU ROM to specifically use the I Love You text:
2F72: 21 6F C0 ld hl,$C06F
2F75: CB 66 bit 4,(hl)
2F77: 28 02 jr z,$2F7B
2F79: 3E 04 ld a,$04
2F7B: 21 BF 2F ld hl,$2FBF
...
So it looks like the byte at 0xC06F is the key. If bit 4 is set, we should get the I Love You text! Perhaps the nudity was kept in as an easter egg!
Let’s give that a shot…

Hmm. We have our text, but the lady has disappeared entirely. Maybe there are other variables that need to be set appropriately as well. So how is bit 4 of 0xC06F set within the game?
I’ll spare you the next couple hours of reverse engineering that occurred, as it was basically just a lot of poking the code with the debugger and seeing how it reacts. But the result is this: there is a hidden staff roll within the game, and when that is enabled, our bit 4 on 0xC06F is set.
How to trigger the staff roll? It’s surprisingly simple: on the very first course, for the very first shot, let it time out. Then, on course 11, once again on the very first shot, let it time out again.
And that’s it. You’ll still need to make it through all 22 courses in the game, which will bring you to the usual ending screen.

However, after the Tecmo logo scrolls down, the music will change, a couple of small graphics appear on the bottom, and the logo is replaced with staff names scrolling in and out horizontally.


One of the graphics at the bottom is an origami crane, and the other is an icon reading MAR. It’s unclear what exactly they relate to, but I’m sure they mean something to someone on the staff.
After the credits end, we are shown the game over screen like usual. And look, our I Love You text is there!

… but the girl is still missing, even after we’ve triggered everything properly. Hmm.
Do you remember the animation pointer table we discussed in the first section? It has eight entries, followed immediately by code and data. The “I Love You” screen above is trying to referenced a ninth entry in this list, which of course doesn’t exist. It hits a zero and doesn’t display anything.
What does this mean? Something was removed, or it never worked in the first place. Considering we already have proof of nudity being removed and given the nature of the text on this screen, my bet is it was another nude image, likely a variation on one of the existing animations. The code here does not set things up for the floating hearts, so if it was the blowing kiss animation, it wasn’t exactly the same as what we have on the score card screen.
We could change the reference to the hole-in-one animation, but it would not be centered on the screen (as she normally is on the game over screen). We could copy the existing animation again, reposition it, and move the pointer table somewhere else and add the ninth entry… but that just seems unnecessary work at this point. We don’t know for sure what this “I Love You” screen displayed, so for us to display any of the girl animations here is no longer restoration but creating something new. That’s not really something I’m interested in doing.
Besides, we’ve restored her in the score card screen, and I think that resolves things pretty thoroughly. So I’m calling the mystery of Tee’d Off’s titties resolved.
If you enjoyed this article and found it useful, please consider contributing to our Ko-fi. Thank you! 🩷