Post subject: James Bond 007: The Duel
Dimon12321
He/Him
Editor, Reviewer, Experienced player (596)
Joined: 4/5/2014
Posts: 1222
Location: Romania
James Bond 007: The Duel seems to be the only game about James Bond for Sega Genesis. Back in the childhood, with the help of piracy, each cartridge contained up to 16 games and I played each game when I was bored. I think I would not soon remembered it, if not a trip to the cinema on Skyfall in 2012. After 2 years, I finally decided to TAS it though not everyone likes it somehow. This game is a platformer where you should rescue women hostages, find the bomb and escape, shooting bad guys by the way. There are 4 levels and only 1 boss in the end of the game. I've done the 1st level: User movie #18356009097307342 Input goes further, but it can be finished on the frame 5764-5765 so the time is 01:36.08. Everything is OK? I didn't find any special tricks because it seems there is no any, but if you found, tell me, please! Anyway, a topic with no answers is better than none.
TASing is like making a film: only the best takes are shown in the final movie.
Player (98)
Joined: 12/12/2013
Posts: 379
Location: Russia
Check this out: http://www.youtube.com/watch?v=fh7X-zAh_tQ and further btw I love this game, and I complete it on real genesis during 1997+ years when I had only genesis :)
Dimon12321
He/Him
Editor, Reviewer, Experienced player (596)
Joined: 4/5/2014
Posts: 1222
Location: Romania
r57shell wrote:
Check this out: http://www.youtube.com/watch?v=fh7X-zAh_tQ and further btw I love this game, and I complete it on real genesis during 1997+ years when I had only genesis :)
I know TAS route without the help of it though it and also mission 3 and final mission shows that my route is the same. Also I'm ~3,5 secs ahead for now!
TASing is like making a film: only the best takes are shown in the final movie.
Player (98)
Joined: 12/12/2013
Posts: 379
Location: Russia
Dimon12321 wrote:
I know TAS route without the help of it though it and also mission 3 and final mission shows that my route is the same. Also I'm ~3,5 secs ahead for now!
Who knows what you know except you? What if you didn't see this TAS and your resulting TAS would be slower? There would be laugh and rejection, because bad route/optimization/not used bug. I just want to be sure that you seen existed work! Note, this TAS isn't in TASVideos database! So who knows, maybe you look into tasvideos submissions only.
Dimon12321
He/Him
Editor, Reviewer, Experienced player (596)
Joined: 4/5/2014
Posts: 1222
Location: Romania
r57shell wrote:
Dimon12321 wrote:
I know TAS route without the help of it though it and also mission 3 and final mission shows that my route is the same. Also I'm ~3,5 secs ahead for now!
Who knows what you know except you? What if you didn't see this TAS and your resulting TAS would be slower? There would be laugh and rejection, because bad route/optimization/not used bug. I just want to be sure that you seen existed work! Note, this TAS isn't in TASVideos database! So who knows, maybe you look into tasvideos submissions only.
This work seems to be done using Gens v2.12. No, every TASer should look for all possible info before starting any game! You probably often hear this answer on the question: "So, google it!" (on russian: "Так загугли!"). It's good that it isn't in TASVideos database, because even me found an improve! Also I found another improve by despawning an enemy on the bridge (1:13-1:16 in the video) and not taking damage from the last one! Now the time is 01:35.17!
TASing is like making a film: only the best takes are shown in the final movie.
Player (98)
Joined: 12/12/2013
Posts: 379
Location: Russia
Noone is perfect. I just knew that this TAS already exists, but it took time for me to find it out, where I've seen it. So probably you didn't find it, so I post it.
Dimon12321
He/Him
Editor, Reviewer, Experienced player (596)
Joined: 4/5/2014
Posts: 1222
Location: Romania
r57shell wrote:
Noone is perfect. I just knew that this TAS already exists, but it took time for me to find it out, where I've seen it. So probably you didn't find it, so I post it.
I found everything I could and that TAS too.
TASing is like making a film: only the best takes are shown in the final movie.
ars4326
He/Him
Experienced player (778)
Joined: 12/8/2012
Posts: 706
Location: Missouri, USA
You're working hard, Dimon! Already on TAS #5. Looking forward to your next one!
"But as it is written, Eye hath not seen, nor ear heard, neither have entered into the heart of man, the things which God hath prepared for them that love him." - 1 Corinthians 2:9
Dimon12321
He/Him
Editor, Reviewer, Experienced player (596)
Joined: 4/5/2014
Posts: 1222
Location: Romania
ars4326 wrote:
You're working hard, Dimon! Already on TAS #5. Looking forward to your next one!
Rambo 3 is done in general! I've improved all parts of maTO's run, but I need to crossbreed some parts in 2 gens movies (.gmv) into one, because there are unbeatable parts and I have "disimproves" there. How to do this easily? Is it possible to do this with TAS Movie Editor?
TASing is like making a film: only the best takes are shown in the final movie.
ars4326
He/Him
Experienced player (778)
Joined: 12/8/2012
Posts: 706
Location: Missouri, USA
Dimon12321 wrote:
ars4326 wrote:
You're working hard, Dimon! Already on TAS #5. Looking forward to your next one!
Rambo 3 is done in general! I've improved all parts of maTO's run, but I need to crossbreed some parts in 2 gens movies (.gmv) into one, because there are unbeatable parts and I have "disimproves" there. How to do this easily? Is it possible to do this with TAS Movie Editor?
You'd be able to "splice" them together with TAS Movie Editor, but your RNG might turn out different. It's worth a shot, though.
"But as it is written, Eye hath not seen, nor ear heard, neither have entered into the heart of man, the things which God hath prepared for them that love him." - 1 Corinthians 2:9
Dimon12321
He/Him
Editor, Reviewer, Experienced player (596)
Joined: 4/5/2014
Posts: 1222
Location: Romania
ars4326 wrote:
Dimon12321 wrote:
ars4326 wrote:
You're working hard, Dimon! Already on TAS #5. Looking forward to your next one!
Rambo 3 is done in general! I've improved all parts of maTO's run, but I need to crossbreed some parts in 2 gens movies (.gmv) into one, because there are unbeatable parts and I have "disimproves" there. How to do this easily? Is it possible to do this with TAS Movie Editor?
You'd be able to "splice" them together with TAS Movie Editor, but your RNG might turn out different. It's worth a shot, though.
Let's experiment :-)
TASing is like making a film: only the best takes are shown in the final movie.
Player (98)
Joined: 12/12/2013
Posts: 379
Location: Russia
Dimon12321 wrote:
I found everything I could and that TAS too.
I'm telling you, that you COULD miss something. Stop it, now.
Player (98)
Joined: 12/12/2013
Posts: 379
Location: Russia
Archanfel was asking this, so I'm posting it ones - is spawn of flame thrower. zeros - cooldown frame. Download jamesbond.lua
Language: lua

-- James Bond 007 The Duel -- 2015 by r57shell function GetCam() xcam = memory.readwordsigned(0xFFC8F4) ycam = memory.readwordsigned(0xFFC8F6) end function GetBox(Base) GetCam() x1 = memory.readwordsigned(Base + 0x0) - xcam y1 = memory.readwordsigned(Base + 0x2) - ycam x2 = memory.readwordsigned(Base + 0x4) - xcam y2 = memory.readwordsigned(Base + 0x6) - ycam end function rngonce(rnd) if (rnd < 0) then return AND(XOR(rnd, 0x76B553)*2, 0xFFFFFFFF); else return AND(rnd*2, 0xFFFFFFFF); end end function rngroll(rnd) if (rnd >= 0x80000000) then rnd = rnd - 0x80000000; rnd = rnd - 0x80000000; end for i = 1, 8 do rnd = rngonce(rnd); end return rnd; end function Hitbox() local i = 0 local boxstart = memory.readword(0xFFD04E+2) + 0xFF0000; while (i < 0x40) do local base = i*0x80 + 0xFFD066 local box = boxstart + i*8; if (memory.readword(base) ~= 0 and memory.readword(box) ~= 0x8000) then GetBox(box); if (base == 0xFFE066 or base == 0xFFE0E6) then gui.box(x1, y1, x2, y2, "#00ff0000") else gui.box(x1, y1, x2, y2, "#00ffff00") if (x2 < 0) then gui.text(x1 + 2, y2 - 7, "x:" .. x1 ) end if (x1 >= 320) then gui.text(x1 + 2, y2 - 7, "x:" .. x1 - 320) end if (y2 < 0) then gui.text(x2 + 2, y2 - 7, "y:" .. y2 ) end if (y1 >= 224) then gui.text(x2 + 2, y2 - 7, "y:" .. y1 - 224) end end end i = i + 1 end end function Main() Hitbox() local rnd = memory.readlong(0xFFC8E4); local i for i = 0, 50 do local v = AND(rnd,0x30000); if (v == 0) then gui.text(2+i*5, 210, "1"); else gui.text(2+i*5, 210, "0"); end rnd = rngroll(rnd); v = AND(rnd,0x30000); if (v == 0) then gui.text(2+i*5, 200, "1"); else gui.text(2+i*5, 200, "0"); end rnd = rngroll(rnd); end end gui.register(Main)
hmm also wanna mention that fact, that it does check hit only if (sprite_index % 3 == word at FFD01A).
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
r57shell wrote:
Archanfel was asking this, so I'm posting it ones - is spawn of flame thrower. zeros - cooldown frame.
Thanks, i make a count of rightmost amount of zeros in row to simplify perception of cooldown. And also add several my own horribly-written things :)) Download jamesbond_v2.lua
Language: lua

-- James Bond 007 The Duel -- 2015 by r57shell (and a very little bit by Archanfel) RND_1 = 0 RND_2 = 0 RND_1_MAX = 0 RND_2_MAX = 0 XposLast = 0 YposLast = 0 function GetCam() xcam = memory.readwordsigned(0xFFC8F4) ycam = memory.readwordsigned(0xFFC8F6) end function GetBox(Base) GetCam() x1 = memory.readwordsigned(Base + 0x0) - xcam y1 = memory.readwordsigned(Base + 0x2) - ycam x2 = memory.readwordsigned(Base + 0x4) - xcam y2 = memory.readwordsigned(Base + 0x6) - ycam end function rngonce(rnd) if (rnd < 0) then return AND(XOR(rnd, 0x76B553)*2, 0xFFFFFFFF); else return AND(rnd*2, 0xFFFFFFFF); end end function rngroll(rnd) if (rnd >= 0x80000000) then rnd = rnd - 0x80000000; rnd = rnd - 0x80000000; end for i = 1, 8 do rnd = rngonce(rnd); end return rnd; end function Hitbox() local i = 0 local boxstart = memory.readword(0xFFD04E+2) + 0xFF0000; while (i < 0x40) do local base = i*0x80 + 0xFFD066 local box = boxstart + i*8; if (memory.readword(base) ~= 0 and memory.readword(box) ~= 0x8000) then GetBox(box); if (base == 0xFFE066 or base == 0xFFE0E6) then gui.box(x1, y1, x2, y2, "#00ff0000") else gui.box(x1, y1, x2, y2, "#00ffff00") if (x2 < 0) then gui.text(x1 + 2, y2 - 7, "x:" .. x1 ) end if (x1 >= 320) then gui.text(x1 + 2, y2 - 7, "x:" .. x1 - 320) end if (y2 < 0) then gui.text(x2 + 2, y2 - 7, "y:" .. y2 ) end if (y1 >= 224) then gui.text(x2 + 2, y2 - 7, "y:" .. y1 - 224) end end end i = i + 1 end end function Main() Hitbox() local rnd = memory.readlong(0xFFC8E4); local i for i = 0, 50 do local v = AND(rnd,0x30000); if (v == 0) then RND_2 = 0 gui.text(2+i*5, 210, "1"); else RND_2 = RND_2 + 1 gui.text(2+i*5, 210, "0"); end rnd = rngroll(rnd); v = AND(rnd,0x30000); if (v == 0) then RND_1 = 0 gui.text(2+i*5, 200, "1"); else RND_1 = RND_1 + 1 gui.text(2+i*5, 200, "0"); end rnd = rngroll(rnd); end if (RND_1 > RND_1_MAX) then RND_1_MAX = RND_1 else end if (RND_2 > RND_2_MAX) then RND_2_MAX = RND_2 else end gui.text(320,190 ,string.format(" MAX"), 0xFF0000FF, clear) gui.text(260,200 ,string.format("RND_1:%2d %2d",RND_1,RND_1_MAX), 0xFF0000FF, clear) gui.text(260,210 ,string.format("RND_2:%2d %2d",RND_2,RND_2_MAX), 0xFF0000FF, clear) Xpos = memory.readword(0xFFE08A) Ypos = memory.readword(0xFFE08C) BossHP = memory.readbyte(0xFFE929) + 1 MINIBossHP = memory.readbyte(0xFFEB21) + 1 Ammo = memory.readbyte(0xFFF47F) + 1 YPLATFORM1 = memory.readword(0xFFE40C) YPLATFORM2 = memory.readword(0xFFE48C) XPLATFORM1 = memory.readword(0xFFE40A) XPLATFORM2 = memory.readword(0xFFE49E) Xspd = Xpos-XposLast Yspd = Ypos-YposLast XposLast = Xpos YposLast = Ypos if (Xpos == 0 and Ypos == 0) then else gui.text(10,1,string.format("pos:%4d %4d spd:%4d %4d",Xpos,Ypos,Xspd,Yspd), 0xFFFF00FF, clear) if (YPLATFORM1>0) then gui.text(235,1,string.format("PLY1:%4d",YPLATFORM1-44), 0xFFFF00FF, clear) else end if (YPLATFORM2>0) then gui.text(280,1,string.format("PLY2:%4d",YPLATFORM2-44), 0xFFFF00FF, clear) else end if (XPLATFORM1>0) then gui.text(235,11,string.format("PLX1:%4d",XPLATFORM1), 0xFFFF00FF, clear) else end if (XPLATFORM2>0) then gui.text(280,11,string.format("PLX2:%4d",XPLATFORM2), 0xFFFF00FF, clear) else end if (Ammo > 254) then gui.text(16,151,string.format("Ammo:Empty"), 0xFF0000FF, clear) else gui.text(16,151,string.format("Ammo"), 0xFFFF00FF, clear) gui.text(35,151,string.format("x%2d",Ammo), 0xFFFF00FF, clear) end end if (BossHP > 1 and BossHP < 42) then gui.text(148,11,string.format("Boss HP:%3d",BossHP), 0xFF0000FF, clear) else end if (MINIBossHP > 1 and MINIBossHP < 42) then gui.text(138,21,string.format("MINIBoss HP:%3d",MINIBossHP), 0xFF0000FF, clear) else end savestate.registerload(function() RND_1_MAX = 0 RND_2_MAX = 0 end) end gui.register(Main)
Question: Is it possible somehow to assign zero values for RND_1_MAX and RND_2_MAX at every time when game is loaded from savestate? Edit: Thanks again.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Player (98)
Joined: 12/12/2013
Posts: 379
Location: Russia
savestate.registerload(function() print("yo") end)
Dimon12321
He/Him
Editor, Reviewer, Experienced player (596)
Joined: 4/5/2014
Posts: 1222
Location: Romania
Good luck!
TASing is like making a film: only the best takes are shown in the final movie.
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Dimon12321 wrote:
Good luck!
Thanks. Probability of RNG event which necessary to crack last level is approximately 1/226 so luck will be pretty helpful. Btw first two missions done, currently i am about 00:38.62 seconds ahead of published run.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Dimon12321
He/Him
Editor, Reviewer, Experienced player (596)
Joined: 4/5/2014
Posts: 1222
Location: Romania
Archanfel wrote:
Btw first two missions done, currently i am about 00:38.62 seconds ahead of published run.
TASing is like making a film: only the best takes are shown in the final movie.
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Mission 3 also bring good harvest of frames. {More than one minute ahead of published run.} New tricks: 1)At some occasions Bond is able survive if he falls from high places. => Long and boring period of waiting of main elevator is left in past :) 2)Two huge shortcuts with deaths after liberation of Bond's girls. 3)In the game there is no hand to hand combat, however James is well known master contactless battles, and even without using hands he can help guards take a hot bath in boiling lava [for entertainment]. I guess already on next week this short project will be completed.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Player (98)
Joined: 12/12/2013
Posts: 379
Location: Russia
D:
XTREMAL93
He/Him
Active player (446)
Joined: 1/6/2012
Posts: 586
Location: Azerbaijan, Baku
At the end of first level, can you save time by using Jetpack instead of submarine?