2. Characters auto-equip stuff assigned by Equipment.txt. I think they do it in a first-come-first-server order. Best look at Wolgraff's entry, because he is the only one of the companions who has a spare bow and he has his two daggers equipped when you hire him.
(When I undressed and redressed him via script, he had the bow equipped, so order matters.)
For 3 and 4 look into the Osiris scripts. The whole exclamation marker thing must be somewhere in the Osiris scripts.
_Global_AffinitySystem.txt has
PROC
ProcDefineAffectionDialog((CHARACTER)_SrcChar,(STRING)_Dialog)
AND
NOT DB_DualDialogsDisabled(1)
AND
_Player.DB_IsPlayer()
AND
NOT DB_Companion(_Player)
AND
_Player!=_SrcChar
AND
NOT DB_AffectionDialog(_Dialog,_SrcChar,_)
THEN
PROC_CheckPlayTutWithDelay("TUT_DualDialog",500);
PROC_LoopEffectAtCharacter("FX_GP_ExclamationMark_A",_Player,"AffectionExclamationMark","__ANY__");
PROC_LoopEffectAtCharacter("FX_GP_ExclamationMark_A",_SrcChar,"AffectionExclamationMark","__ANY__");
CharacterSetHasDialog(_Player,1);
CharacterSetHasDialog(_SrcChar,1);
DB_AffectionDialog(_Dialog,_SrcChar,_Player);
You probably do not want to show tutorial messages in your mod so you can skip the first call.
(... and you have to look up how the procedures work)
You can play loop effects with character scripts too if you wish.
I just quickly looked over some scripts and I believe, the Rift Travel button is shown with the call SetHomesteadKeyState(<INT>) like in HOM_Key.txt
IF
DB_GlobalEvent("CYS_HomesteadKeyGiven")
THEN
DB_FirstTimeUse(1);
SetHomesteadKeyState(2);
UnlockWaypoint("WAYP_Homestead",TRIGGER_CentralRoomEntry);
UnlockWaypoint("WAYP_Cyseal_NorthGate",TRIGGER_WAYP_Cyseal_NorthGate_Pos);
with parameter 1 being enabled and 2 being enabled and blinking, and 0 being disabled (used in the Luculla Mines I think).
Rift Travel is disabled in the endgame
PROC
Proc_Endgame_Dreamsequence_Start()
THEN
SetHomesteadKeyState(0);
EnableSendToHomestead(0);
PROC_TeleportingRegionBlockOn();
CharacterTeleportPartyToTrigger(TRIGGER_END_RoomA_Entrance,"");
DB_AD_Dialog(CHARACTER_Zandalor,"HOM_AD_Zandalor_PortalWait");
CharacterSetOnStage(CHARACTER_Zandalor,1);
ProcRemoveAllDialogEntriesForSpeaker(CHARACTER_Zandalor);
Proc_END_PrepRoomB();
IgnoreOnlyCompanionDialogs(1);
ProcCancelAllCompanionDialogs(CHARACTER_Madoc);
ProcCancelAllCompanionDialogs(CHARACTER_Jahan);
ProcCancelAllCompanionDialogs(CHARACTER_Wolgraff);
ProcCancelAllCompanionDialogs(CHARACTER_Bairdotr);
ProcRemoveAllDialogEntriesForSpeaker(CHARACTER_Madoc);
ProcRemoveAllDialogEntriesForSpeaker(CHARACTER_Jahan);
ProcRemoveAllDialogEntriesForSpeaker(CHARACTER_Wolgraff);
ProcRemoveAllDialogEntriesForSpeaker(CHARACTER_Bairdotr);
DB_AD_Dialog(CHARACTER_Madoc,"END_AD_Madora");
DB_AD_Dialog(CHARACTER_Jahan,"END_AD_Jahan");
DB_AD_Dialog(CHARACTER_Wolgraff,"END_AD_Wolgraff");
DB_AD_Dialog(CHARACTER_Bairdotr,"END_AD_Bairdotr");
DB_EndLevelStarted(1);
If you want to know, why the button is not shown at all in the beginning, you have to ask Larian ... hmm, don't even bother ;-)
All we can do is guess that it's only shown when it's activated once and then never removed again.
(A reason not to remove it with parameter 0 could be to have an event to catch to display a auto-dialog and diaog in the mines.)