I actually started developing questionmark scripts back in 2012 for one of my many unfinished projects.

These scripts display a questionmark when the player is near enough and targeting the object. Unlike my AGSP scripts, this one does NOT freeze the player while the script is running, the player is free to turn away, move and shoot. Since the script is using ETIMER it's not going to collide with other scripts or combat. However, it could be tricky to p.e. place 5 objects on a table each using a variation of this script. Version 2 would be better suited in this case.

Version 1 remembers the last line the player has seen and continues from then when the player targets the object again.

;Artificial Intelligence Script
by TheStoryteller01 2012
;Header
desc=
This script only works with FPSC 1.18. or later.
Made for items that can be picked up.
Best ist to set the item properties "Isimmobile" to "Yes" and "Strength" to "0" (=indestructible)
The script starts when the player moves the cursor over the item while not more than 60 units away
;Triggers
:state=0:state=1
:state=1,pickobject=1,plrdistwithin=60:state=3
:state=3:fpgcrawtextsize=48,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=46
:state=3:fpgcrawtext=?
:state=3,pickobject=1,plrdistwithin=60,plrusingaction=1:state=4
:state=3,pickobject=0:state=0
:state=4,pickobject=1,plrdistwithin=60:etimerstart,state=5
:state=5:fpgcrawtextsize=24,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=56
:state=5:fpgcrawtext=an old key
:state=5,plrusingaction=1,etimergreater=500:state=6
:state=5,pickobject=0:state=14
:state=6,pickobject=1,plrdistwithin=60:etimerstart,state=7
:state=7:fpgcrawtextsize=24,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=56
:state=7:fpgcrawtext=press <enter> to take the key
:state=7,plrusingaction=1,etimergreater=500:state=20
:state=7,pickobject=0:state=16
:state=14,pickobject=1,plrdistwithin=60:etimerstart,state=15
:state=15:fpgcrawtextsize=24,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=56
:state=15:fpgcrawtext=an old key
:state=15,plrusingaction=1,etimergreater=500:state=6
:state=15,pickobject=0:state=14
:state=16,pickobject=1,plrdistwithin=60:etimerstart,state=17
:state=17:fpgcrawtextsize=24,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=56
:state=17:fpgcrawtext=press <enter> to take the key
:state=17,plrusingaction=1,etimergreater=500:state=20
:state=17,pickobject=0:etimerstop,state=16
:state=20:playertake,coloff,plrsound=audiobank\thestoryteller01\keypickup.wav,state=90
:state=90:
;End of Script

Version 2 has the script return to state=1 if the player "untargets" the object at any time and displays the questionmark it the player targets it again.

;Artificial Intelligence Script
by TheStoryteller01 2012
;Header
desc=
This script only works with FPSC 1.18. or later.
Made for items that can be picked up.
Best ist to set the item properties "Isimmobile" to "Yes" and "Strength" to "0" (=indestructible)
The script starts when the player moves the cursor over the item while not more than 60 units away
;Triggers
:state=0:state=1
:state=1,pickobject=1,plrdistwithin=60:state=3
:state=3:fpgcrawtextsize=48,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=46
:state=3:fpgcrawtext=?
:state=3,pickobject=1,plrdistwithin=60,plrusingaction=1:state=4
:state=3,pickobject=0:state=0
:state=4,pickobject=1,plrdistwithin=60:etimerstart,state=5
:state=5:fpgcrawtextsize=24,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=56
:state=5:fpgcrawtext=an old key
:state=5,plrusingaction=1,etimergreater=500:state=6
:state=5,pickobject=0:state=1
:state=6,pickobject=1,plrdistwithin=60:etimerstart,state=7
:state=7:fpgcrawtextsize=24,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=56
:state=7:fpgcrawtext=press <enter> to take the key
:state=7,plrusingaction=1,etimergreater=500:state=20
:state=7,pickobject=0:state=1
:state=14,pickobject=1,plrdistwithin=60:etimerstart,state=15
:state=15:fpgcrawtextsize=24,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=56
:state=15:fpgcrawtext=an old key
:state=15,plrusingaction=1,etimergreater=500:state=6
:state=15,pickobject=0:state=1
:state=16,pickobject=1,plrdistwithin=60:etimerstart,state=17
:state=17:fpgcrawtextsize=24,fpgcrawtextfont=verdana,fpgcrawtextr=190,fpgcrawtextg=190,fpgcrawtextb=190,fpgcrawtextx=50,fpgcrawtexty=56
:state=17:fpgcrawtext=press <enter> to take the key
:state=17,plrusingaction=1,etimergreater=500:state=20
:state=17,pickobject=0:etimerstop,state=1
:state=20:playertake,coloff,plrsound=audiobank\thestoryteller01\keypickup.wav,state=90
:state=90:
;End of Script

I didn't pursue this idea further because I found out the RAWTEXT questionmark would only work with very few crosshairs (a dot and a ring to be precise) and so it wasn't worth publishing imo.

But maybe it can provide a start for you @PixelF

In case you find my grammar and spelling weird ---> native German speaker ^^