It should work, so I expect your problem is somewhere else other than the little piece of code you gave. There are several more-efficient ways to do it though. One would be
Code:
LDA GameJob
ASL A
TAX
JMP (Game_Addr_Table,X)
(although you'll need a CMOS 6502 for the JMP (ind,X). If you can just make the GameJob variable twice as high, you can skip the ASL and just load X directly with the value of the index into the address table:
Code:
LDX GameJob
JMP (Game_Addr_Table,X)
Another way would be to keep decrementing the register and branching if the decrement resulted in 0:
Code:
LDX GameJob
BEQ This_Game
DEX
BEQ That_Game
DEX
BEQ The_Other_Game
DEX
BEQ Yet_Another_Game
etc.
This of course means you're back to branching to jumps since the game programs s won't be small enough to reach them all by jumping only half a page.