Thank you for the feedback helaku!
1) Making the city doors close at night is actually on the TODO list. But because the doors are not actually objects, but part of the static background graphics, it is very difficult to implement, at least without making the cities lag a ton whenever you scroll the screen, as the game would have to consider which graphics to render depending on time of day. This fix is unlikely to ever be actually implemented, unless someone invents a really efficient way to do it.
2) The reason that time is stopped while in church or houses is because you cannot enter them at night, and because the NPC objects are inhibited from appearing on night. Stopping the time avoids the uncomfortable question of what exactly should happen when it becomes night when you're still inside.
be able to go about the way that Papers, Please does it, and run the clock until 17:59:59, and stop it there, making it a nightfall immediately when the player exits the house.
3) This is kind of a vexing problem. I never understood why this one invisible thing in the game was made visible with a crystal, when every other invisible thing is made visible with Dracula's eye. In any case, it's not like the player expects to be able to jump on the moving platform they cannot see. A beginning player is not likely to try the jump and succeed without the crystal. It is an advanced player's technique, or a speedrun technique. I would leave it be. Secondly it is probably difficult to change. :-)
4) The cross and the ring are indeed selectable items now, yet only the rib, the eye, the nail, and the heart have ingame uses. However, there are now some NPCs that react to you either presenting or possessing these remaining two items, if dialog extensions are permitted in the patch. It is difficult to justify going further than this without altering the nature of the game.
5) "to repair the garlic bug; when you use a garlic you can't use holly water and the first dagger" -- How's that a bug? You can only use one item at time. *tests* Ohh, you mean you cannot use those weapons when a garlic is still visible on the screen. That's interesting, yes. Note that you also cannot throw a holy water bottle as long as the sacred flame or the diamond is visible on the screen. It is kind of similar to how in Mega Man, you cannot even enter the pause screen as long as your weapon effect is still on-screen. In Mega Man, the reason is in VRAM; graphics for these different weapon effects cannot fit in the VRAM at the same time, but this is not the reason in Simon's Quest.
Hmm... Here's the code that is responsible for dealing with spawning the onscreen special weapon object, such as the garlic...
$D82F A2 03: ldx #$03 ; Start from slot #3
- $D831 BD B4 03: lda ObjectType,x
$D834 F0 07: beq SpecialWeaponUse_Do_ThereisAFreeSlot ; Use slot if free
$D836 E8: inx
$D837 E0 06: cpx #$06 ; Stop at slot #6
$D839 90 F6: bcc - ; $D831
$D83B 18: clc ; Didn't create weapon
$D83C 60: rts
$D83D A5 90: lda InventoryCursorSelected1 ; Choose weapon type and use jump table.
$D83F 20 BB C5: jsr JumpWithParams
$D842 3B D8: .word (SpecialWeaponUse_Nothing) ;D83B (1D83B) ()
$D844 CF D8: .word (SpecialWeaponUse_Weapon1_Dagger) ;D8CF (1D8CF) ()
$D846 D6 D8: .word (SpecialWeaponUse_Weapon2and3_Knifes) ;D8D6 (1D8D6) ()
$D848 D6 D8: .word (SpecialWeaponUse_Weapon2and3_Knifes) ;D8D6 (1D8D6) ()
$D84A A3 D8: .word (SpecialWeaponUse_Weapon4_Bottle) ;D8A3 (1D8A3) ()
$D84C 0D D8: .word (SpecialWeaponUse_Weapon5_Diamond) ;D80D (1D80D) ()
$D84E 9B D8: .word (SpecialWeaponUse_Weapon6_Flame) ;D89B (1D89B) ()
$D850 92 D8: .word (SpecialWeaponUse_Weapon7_OakStake) ;D892 (1D892) ()
$D852 1A D9: .word (SpecialWeaponUse_Weapon8_Laurel) ;D91A (1D91A) ()
$D854 2E D9: .word (SpecialWeaponUse_Weapon9_Garlic) ;D92E (1D92E) ()
where e.g. Bottle is created as such:
$D8A3 E0 03: cpx #$03 ; Was the slot number #3?
$D8A5 F0 03: beq SpecialWeaponUse_CreateGravityObject ; Go ahead if so
$D8A7 4C 3B D8: jmp SpecialWeaponUse_Nothing ; Don't create if wasn't
$D8AA 20 E8 D7: jsr SpecialWeaponUse_CreateObject
$D8AD A9 01: lda #$01
$D8AF A0 80: ldy #$80
$D8B1 20 4F E0: jsr Object_SetXVelocity16bit_from_AY_invert_if_ObjectFacingLeft_set
$D8B4 A9 FF: lda #$FF
$D8B6 A0 00: ldy #$00
$D8B8 20 76 E0: jsr Object_SetYVelocity16bit_from_AY
$D8BB A9 11: lda #$11
$D8BD 20 18 C1: jsr AnyBankPlayTracks
$D8C0 A5 90: lda InventoryCursorSelected1
$D8C2 C9 04: cmp #$04
$D8C4 F0 05: beq + ; $D8CB
$D8C6 A9 20: lda #$20
- $D8C8 4C 2A D8: jmp _loc_1D82A
+ $D8CB A9 33: lda #$33
$D8CD D0 F9: bne - ; $D8C8 -> _loc_1D82A
Ah, so there we go.
A bottle is only ever created in slot 3. If the first free slot is 4 or 5, it won't do. The reason for this is to avoid having multiple bottles on screen simultaneously.
But, seeing how this is implemented, we can probably deduce a way to circumvent the limitation!
There we go. A bottle is not prevented from being created while garlic is simultaneously on the screen, as long as none of the remaining on-screen garlics occupy slot #3
! This is ensured by scrolling away the first garlic. Garlics in slots #4 and #5 don't matter.
I think this confirms the nature of this limitation as a bug. And as reported, the dagger also shares this same check.
Now how could I patch the code at D8A3..D8A9 (seven bytes), and D8CF..D8D5 (another seven, for dagger) to fix this problem?
I would probably need a subroutine that looks like this:
lda InventoryCursorSelected1 ; 2 bytes
ldy #2 ; 2 bytes -- using Y so we won't clobber X
iny ; 1 byte
cpy #6 ; 2 bytes
beq accept ; 2 bytes
cmp ObjectType,y ; 3 bytes
bne loop ; 2 bytes
pla ; 1 byte (two plas = pop one return address)
pla ; 1 byte
clc ; 1 byte , Do the same as SpecialWeaponUse_Nothing
rts ; 1 byte
For a total of 18 bytes.
And the call site at D8A3..D8A9 would be transformed into:
jsr CheckIdenticalWeaponObject ; 3 bytes (call this new function)
beq SpecialWeaponUse_CreateGravityObject ; 2 bytes
And the call site at D8CF would be transformed into:
jsr CheckIdenticalWeaponObject ; 3 bytes (call this new function)
beq SpecialWeaponUse_CreateDaggerOrKnife ; 2 bytes
Relieving these four nop-bytes as free space. I might even need to relocate those code sections a bit so that those four free bytes can be made consecutive. Something unrelated just might be able to squeeze in those four bytes. It is still a net loss of 14 bytes in the common bank (bank 7) that is already starved for space. The 18 bytes could however also be placed in bank 3, because that's where SpecialWeaponUse_Try_FindSlot is invoked from.
Okay, this one is officially on a TODO list.
There is one more bug report that is pending a bug fix: 6) When the "Simon blinks when hurt" patch is enabled, and you land the final hit on Dracula while Simon is blinking, it is possible that Simon remains invisible throughout the whole ending scene.