# Python 3, <strike>421</strike> <strike>414</strike> 410 bytes

<!-- language: lang-py -->

    import sys,re
    v,i,c,g,L={},0,[re.sub('( )([^9]+)','\\1',l).rstrip().split(' ')for l in open(sys.argv[1])],lambda i:v.get(i,int(i)//9),len
    while 0<=i<L(c):
     d=c[i];l=L(d);e=d[0];i+=1
     if l>1:
      if e:w=[g(j)for j in d[1:]];v[e]=sum(w[0::2])-sum(w[1::2])
      elif l==2:j=input();v[d[1]]=int(j)if L(d[1])%2 else ord(j)
      elif not any(g(j)for j in d[2:]):i=g(d[1])*9
     elif e:w=g(e);print(w if L(e)%2 else chr(w%128))

Pretty much just a literal implementation of the spec, golfed down as far as I can get it. "Output" command outputs values with trailing linebreaks (unlike the examples in the OP), but I'm assuming that's ok based on the caveats in the "additional details" section. If not, that can be fixed using `sys.stdout.write(str(...))` instead of `print(...)` for a 16 byte penalty.

Run from the command line by supplying a 99 source-code file as the sole argument (e.g. the last example from the OP):

    > python3 ninetynine.py countdown.txt
    G
    11
    G
    10
    G
    9
    G
    8
    G
    7
    G
    6
    G
    5
    G
    4
    G
    3
    G
    2
    G
    1
    G
    >