Author Topic: What was the original King's Quest PCjr release date?  (Read 663 times)

0 Members and 1 Guest are viewing this topic.

Offline lance.ewing

What was the original King's Quest PCjr release date?
« on: October 22, 2016, 03:42:09 PM »
Does anyone happen to know what the exact release date of the original IBM PCjr version of King's Quest 1 was? Clearly it wasn't July 1983 as Wikipedia might have us believe . The best evidence for this is this magazine article:

https://books.google.co.uk/books?id=kSzKzjWHeVEC&lpg=PA61&pg=PA142&redir_esc=y#v=onepage&q&f=true

So in January 1984, Roberta is saying in that article that she has only just finished the game for the PCjr. The IBM PCjr itself had only just started shipping when the above magazine article was published (apparently PCjr shipping was very slow at first and didn't ramp up until about March 1984). It is clear from the wording of the above article that the game wasn't yet available in January 1984. All the stories around the release of King's Quest suggest that it came out first on the PCjr, and then when this was a failure, Sierra refocussed on the other platforms, like the Apple II, standard IBM PC, and the Tandy 1000 (that apparently came out at the end of 1984). Perhaps the 1983 date has relevance to some kind of internal release to IBM, but clearly there was no public availability of the game until 1984.

In Chuck Tingley's LinkedIn profile, he says he was contracted by Sierra to work on King's Quest from January 1983 to May 1984.The February 1985 article about King's Quest says that Sierra were told about the IBM PCjr about a year before the announcement of the IBM PCjr. This announcement happened in November 1983, so a year before that would have been either the end of 1982, or the start of 1983. Chuck's arrival at Sierra would align with these dates then. So Sierra spent the whole of 1983 working on King's Quest.

The July 1983 date seems to come from Sierra themselves:

http://www.sierrahelp.com/Documents/Manuals/Kings_Quest_Collection_-_Manual.pdf

...but the year must be a typo. Surely the month must be wrong as well. I would have expected it to come out earlier in the year in 1984.

Has anyone been able to research this further and work out a month and year that King's Quest was originally released?



Offline lance.ewing

Re: What was the original King's Quest PCjr release date?
« Reply #1 on: October 22, 2016, 03:51:17 PM »
It had apparently been released by August 1984 since it is referenced here as not being available on the IBM PC AT 5170:

http://www.minuszerodegrees.net/misc/IBM%20PC%20AT%205170%20announcement%20letter.txt

Offline lance.ewing

Re: What was the original King's Quest PCjr release date?
« Reply #2 on: October 22, 2016, 04:01:13 PM »
King's Quest entered the Top 20 in this Billboard magazine in November 1984:

https://books.google.co.uk/books?id=JCQEAAAAMBAJ&pg=PA27&dq=kings+quest&hl=en&sa=X&ved=0ahUKEwifhI-Wme_PAhWrAcAKHdJqCXEQ6AEINjAG#v=onepage&q=kings%20quest&f=false

It was already available for the Apple II and IBM at that point.

There is a NEW next to King's Quest in position 16 in the Entertainment section. This would refer to it being a new entry in the Top 20 rather than being a new release though.

Offline NewRisingSun

Re: What was the original King's Quest PCjr release date?
« Reply #3 on: October 22, 2016, 04:05:30 PM »
Record number TX0001393675 at the U.S. Copyright Office lists 1984-05-10 as the publication date.

Offline lance.ewing

Re: What was the original King's Quest PCjr release date?
« Reply #4 on: October 22, 2016, 04:12:55 PM »
Wow! That's great. So the 10th May 1984.

I just found this from a magazine published May 1984:

https://archive.org/details/enter-magazine-07

Page 11 has a write up on King's Quest.

It says that it is already available for the IBM PC and other computers. So by this date it was already available for computers other than the IBM PCjr.

May is the month that Chuck Tingley left Sierra, so it all seems to line up.

Offline lance.ewing

Re: What was the original King's Quest PCjr release date?
« Reply #5 on: October 22, 2016, 04:24:08 PM »
To seemingly contradict what that previous magazine said, we have this one in September 1984 claiming that it wasn't yet available for the Apple II series:

https://archive.org/details/k-power-magazine-07

If it was available in May 1984 for the IBM PC and other computers, then what would those other computers have been at that stage? (we know that by November 1984 it was available for the Apple II though, since that Billboard magazine article had Apple II ticked). They seem to be either ignoring the IBM PCjr or are lumping the standard and PCjr IBM machines in the same pot. So when they said other computers, I was assuming the Apple II was the most likely other computer.

Offline lance.ewing

Re: What was the original King's Quest PCjr release date?
« Reply #6 on: October 22, 2016, 04:27:20 PM »
Here's another one, page 16, published in October 1984:

https://archive.org/details/enter-magazine-11

This one does mention both the IBM PC and PCjr, but strangely it does not yet mention the Apple II.

Offline lance.ewing

Re: What was the original King's Quest PCjr release date?
« Reply #7 on: October 22, 2016, 04:56:28 PM »
Donald B. Trivette's article in February 1985 seems to support the May 1984 date as well:

http://www.atarimagazines.com/compute/issue57/kings_quest.html

Quote
A year before the PCjr was announced - when the "Peanut" was just a rumor to the rest of us - IBM asked Sierra to create a game that would show off the new computer's color graphics capabilities. IBM supplied Sierra with a prototype junior.
    Roberta Williams, who had worked on five other adventure games, was given the task of designing something completely new and different. Eighteen months later, Williams and a team of six programmers and artists had created King's Quest-at a cost of over $700,000.

The IBM PCjr was officially announced in November 1983. A year before that goes back to November 1982.  Eighteen months after November 1982 is May 1984.

Someone could easily say that "a year before" and "Eighteen months" are not particularly exact time periods, but in this case it would appear that they point to the correct date.

Offline NewRisingSun

Re: What was the original King's Quest PCjr release date?
« Reply #8 on: March 30, 2017, 11:54:26 PM »
The previously-available PC-CGA version had an August 16th 1984 date of MAIN.EXE. An earlier version of the game has now been acquired, dated May 31st 1984. Comparing the two versions shows that the game logic, graphics and sound are byte-for-byte identical; only interpreter (MAIN.EXE) as well as the boot sector and loader code changed. (The title screen code is in MAIN.EXE; logic code is not interpreted until the first actual game screen.) Notably, the earlier version only supports CGA composite mode, not RGB mode, and does not credit Chris Iden at the title screen, similar to the IBM PCjr release.

And, most interestingly, the disk again had a snippet of original source code in it!
Code: [Select]
        mov     [di+saveptr],ax         ;save buffer pointer
        mov     ax,[si+word ptr outxpos]
        mov     [di+word ptr xpos],ax   ;positions
        pop     bx
        call    setcel
        mov     al,[di+steptime]
        or      al,al
        jnz     stepok
        mov     al,1
stepok: mov     [di+steptime],al        ;set default steptime
        mov     [di+stepclock],al       ;set stepclock
        ret
setcel: mov     al,[bx]                 ;loop count
        mov     ah,0
        xor     bx,bx                   ;if 1 loop, get loop 0
        dec     ax
        jz      stcel
        inc     bx                      ;if 2 loops, get loop 1
        dec     ax
        jz      stcel
        inc     bx                      ;if 4 loops, get loop 2
        xor     ax,ax
stcel:  push    bp
        mov     bp,sp
        push    ax                      ;pass cel #
        push    bx                      ;pass loop #
        push    di                      ;pass table pointer
        call    getstcel
        pop     di                      ;get table pointer
        pop     bx                      ;get loop #
        mov     sp,bp
        pop     bp
        mov     [di+celcnt],al          ;set cel count
        mov     [di+curl],bl            ;set loop #
        ret
trashem:lea     si,objtab               ;animation table pointer
        lea     di,chuck                ;object table pointer
        mov     ch,outlen               ;object table entry length
        mov     cl,4                    ;nibble shifter
t0:     add     si,grplen               ;point to next animation table
        mov     dl,[si]                 ;get room entry
        cmp     dl,0                    ;not terminator?
        jz      t1
        mov     byte ptr [si],0
        cmp     dl,flags.roomflag       ;in this room?
        jne     t0
        mov     al,[si+disknum]         ;get this object's #
        mul     ch                      ;offset of this obj's table entry
        mov     bx,ax
        mov     dh,[di+bx+outroom]
        and     dh,80h
        or      dl,dh                   ;maintain ego possession
        mov     [di+bx+outroom],dl      ;set this obj's room # entry
        mov     ah,[si+curl]
        mov     al,[si+curcel]          ;combine loop & cel values
        shl     ah,cl
        or      al,ah
        mov     [di+bx+outlupcel],al    ;set loop & cel entry
        mov     ax,word ptr [si+xpos]
        mov     word ptr [di+bx+outxpos],ax      ;set position entries
        jmp     t0              ;process the 3 non-ego animation tables
t1:     add     di,inobjtab     ;point to 1st object table's anitbl entry
        mov     cx,110          ;object count minus 1 (ego)
outlup: add     di,outlen       ;point to next object table
        mov     byte ptr [di],0 ;clear all objs' animation table entries
        loop    outlup          ;process all objects' tables
        mov     chuckptr,0              ;clear loaded objects count
        lea     di,objtab
        mov     byte ptr [di+grplen],0  ;terminate animation tables
        mov     ax,curact
        mov     objptr,ax               ;reset free memory pointer
        mov     cx,40-9
        lea     di,soundpos
        add     di,18
        lea     ax,stopsnd
;        rep     stosw                   ;set all non-res. sound ptrs to silence
        ret
loadego:call    wtprt
        mov     al,0
        call    load_obj                ;get ego
        lea     di,objtab               ;object table pointer
        mov     [di+lgrpptr],ax         ;set loop group pointer
        lea     bx,alterego
        mov     [bx],ax                 ;ditto
        mov     al,0
        mov     [di+disknum],al
        mov     [di+objnum],al
        mov     [di+curcel],al          ;disk #, obj # & cel # = 0
        mov     [di+curl],al            ;loop # = 2
        mov     [di+stepclock],1        ;stepclock = 1

        lea     bx,chuck                ;out table pointer
        mov     ax,[bx+word ptr outxpos]
        mov     [di+word ptr xpos],ax   ;set positions
        mov     ax,savetab
        mov     [di+saveptr],ax         ;set save buffer pointer


        mov     [di+celcnt],8           ;cel count = 8
        push    bp
        mov     bp,sp
        mov     ax,6
        push    ax                      ;pass cel #
        mov     al,0
        push    ax                      ;pass loop #
        push    di                      ;pass table pointer
        call    getstcel                ;set step sizes, cel pointer & stepclock
        mov     sp,bp
        pop     bp
        mov     flags.roomflag,1
        mov     dx,0
        call    dwt

        lea     ax,objtab
        mov     tabptr,ax
        cmp     cpyseq,0
        jnz     ldgrtn
        call    ers
ldgrtn: ret

clearscrn:
        push    ax
        mov     ax,600h
        jmp     sc1
scroll: push    ax
        mov     ax,601h
sc1:    push    bx
        push    cx
        push    dx
        mov     cx,1500h
        mov     dx,1827h
        mov     bh,0
        call    wtprt
        int     10h
        mov     dx,1800h
        jmp     short stcr






setcsr: push    ax
        push    bx
        push    cx
        push    dx
stcr:   mov     curchar,dl
        mov     ah,2
        mov     bh,0
        call    wtprt
        int     10h
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret











term    equ     0ffh
skip    equ     0feh
psn     equ     0fdh
flag    equ     0fch
always  equ     0fbh
ignore  equ     0fah
unknown equ     0f9h












;                              Say-what?
;           Scans the text logic table ( @texptr or @texany )
;       for true sequences of conditions [ text, flag & position ]
;   then passes a pointer for the action table [ @actptr or @actany ]
;  to ACTMODUL to execute the action string for the matched conitions.

saywhat:
        mov     lgcflg,1        ;flag text table checks
        mov     si,txtptr       ;get text logics table pointer
        jmp     chklup

;                             Check-mate!
;         Scans the position logic table ( @posptr or @posany )
;        for true sequences of conditions  [ flags & positions ]
;   then passes a pointer for the action table [ @actptr or @actany ]
;  to ACTMODUL to execute the action string for the matched conitions.

chekmate:
        mov     lgcflg,0        ;flag position table checks
        mov     
« Last Edit: March 31, 2017, 09:43:02 AM by NewRisingSun »

Offline lance.ewing

Re: What was the original King's Quest PCjr release date?
« Reply #9 on: March 31, 2017, 03:39:55 AM »
Wow! That source code snippet is a really great find. I'll have to study this closely. A few familiar concepts in there, but it also looks like some of those comments have answered a few questions about what various things were called in those early KQ "GAL" releases.

Does the code correspond with part of the disassembly that you've been working on?

Offline NewRisingSun

Re: What was the original King's Quest PCjr release date?
« Reply #10 on: March 31, 2017, 09:08:07 AM »
I can find the relevant sections in MAIN.EXE. Basically, GAL has two separate logic scripts for each room, the first logic script dealing with things such as moving objects around, check ego's position, and so on; the second logic script checking and acting upon "said" strings. The source code snippet calls the first logic script the "position logic table", and second logic the "text logic table". AGI of course combines both types into a single logic per room, and Sierra's AGI documentation to my knowledge calls them just "logics", not "logic tables". And what the snippet calls "action table" are just commands outside of a test command block (or inside a curly brace, to speak in source code terms) in AGI, which in GAL again are in a separate section of the room data file.

The code does not seem to use any scoping of names --- procedures are just simple code labels instead of using the Assembler's "PROC" directive, which was introduced with Intel's ASM86 assembler in 1978 and adopted by Microsoft's Macro Assembler in 1981. Due to the lack of scoping, the code in some sections jumps around wildly in the code segment, basically jumping from one end of a procedure right into the middle of another one at the other end of the segment. The code also uses no constants for things like interrupt 10 subfunction numbers. Variable names are shortened to the point of being unintelligible - what the code snippet calls "wtprt" I had named "waitForMsgFinish" in my disassembly, so "wtprt" apparently stands for something like "waitPrint". And why the hell is scanning the "position logic table" called "check-mate"?

Overall, the programming style seems archaic even by 1984 standards. I'm a bit disappointed that this is what original source code looks like. :)
« Last Edit: March 31, 2017, 09:20:24 AM by NewRisingSun »

Offline OmerMor

Re: What was the original King's Quest PCjr release date?
« Reply #11 on: March 31, 2017, 09:21:39 AM »
That's a great find - and very interesting analysis.
Thanks!

Offline NewRisingSun

Re: What was the original King's Quest PCjr release date?
« Reply #12 on: March 31, 2017, 10:29:05 AM »
On second look, there are three small differences in the game logic as well:

1. Room 18, when typing "kill elf":
Code: [Select]
"I'm surprised at you! that is very\nimpolite!"changed to
Code: [Select]
"I'm surprised at you! That is very\nimpolite!"
2. Room 21:
Code: [Select]
if (roomObjectActive==1 && haveGoat==1) {
print("There is a witch in the area, but\n having that menacing goat with you,\n she will keep her distance.");
set(v113);
}
if (roomObjectActive==1 && haveGoat==1) {
print("There is a witch in the area, but with\n the shield no harm will come to you.");
}
changed to
Code: [Select]
if (roomObjectActive==1 && haveGoat==1) {
print("There is a witch in the area, but\n having that menacing goat with you,\n she will keep her distance.");
set(v113);
}
if (roomObjectActive==1 && haveShield==1) {
print("There is a witch in the area, but with\n the shield no harm will come to you.");
}

3. Room 65:
Code: [Select]
"As the wicked witch flew over her\n house, she dropped you... into her\n cage! If you can't get out, you may\n become the secret ingredient in this\n witches brew!" changed to
Code: [Select]
"As the wicked witch flew over her\n house, she dropped you... into her\n cage! If you can't get out, you may\n become the secret ingredient in this\n witch's brew!"
Everything else is the same, as I have verified by using GALextract on both disk images, then comparing all files using Windows' FC command.
« Last Edit: March 31, 2017, 10:33:45 AM by NewRisingSun »

Offline lance.ewing

Re: What was the original King's Quest PCjr release date?
« Reply #13 on: March 31, 2017, 01:19:27 PM »
It's quite amusing to see bugs like that second one. So in that early version, when you're in a room with the witch, and the goat is following you, does it print both of those messages?

Offline NewRisingSun

Re: What was the original King's Quest PCjr release date?
« Reply #14 on: March 31, 2017, 01:40:41 PM »
Yep. I made a video:



SMF 2.0.11 | SMF © 2015, Simple Machines
Simple Audio Video Embedder

Page created in 0.195 seconds with 21 queries.