Grand Theft Auto: San Andreas/Game Mechanics and Glitches/Phonecalls
From SDA Knowledge Base
Phonecalls are triggered after certain events (often finishing a certain mission).
There are two different kinds of phonecalls:
- High-priorty calls have a recall delay of 20s before Badlands and 15s after finishing the mission Badlands. These calls are usually ones that unlock missions (Most Threads).
- Low-priority calls have a recall delay of 60s. These calls include e.g. the Catalina troll calls after CJ parts ways with her (MOB_RAN Thread).
The delay counts from the last time the game considered you busy, this includes being on a mission, receiving a phonecall, cancelling a ringing phone. So for example a high-priority call might come 15s after you finished the last mission or 15s after you last cancelled a call. Even though you can't receive phonecalls when you have a wanted level, it doesn't count towards the delay, so you can receive a phonecall directly after you loose your wanted stars.
Contents
Answering/Cancelling phonecalls
You can only receive calls (phone ringing) when you are not on a mission ($ONMISSION=0) and not in an interior.
The ringing phone counts as a small mission, setting $ONMISISON=1, which means you can't start any missions. Once the call is finished (either because you cancelled it or you accepted and finished it), it will set $ONMISSION=0 again.
You can cancel calls by shooting or getting into a vehicle, which will set $ONMISSION=0 after about 1.6 seconds (timed from between the "Press TAB to answer phone" dialog disappearing to mission markers re-appearing on the map, counted frames on video). So the effective delay after you cancelled a phonecall will be 16.6/21.6/61.6 seconds after you performed the action to cancel (e.g. shooting).
Holding Calls
Holding a call means sort of keeping it in the state of when you're about to answer it. You press and hold the Action key (default TAB) to hold a call, the same key you would press and then let go when normally answering a call, just that you don't let go but keep holding it, until you want to take or cancel the call.
To hold phonecalls in vehicles keep AltFire pressed as long as you are in a vehicle. You have to keep Action pressed as long as you are on foot, including the get in/out animations, but not if you are completely in a vehicle. So you should press Action and AltFire during the get in/out animations and can then let go of one of them accordingly. It might be safer to bind Action/AltFire to one key though, which is possible because one is for on foot and the other for vehicles. This way you only need to keep one button pressed during the entire time you want to hold a phonecall, including driving vehicles.
It is noteworthy that holding AltFire while on a bike will continuosly shoot if you have a MicroSMG or Tec9, which might be a problem and also prevents you from leaning down to go faster.
During the state of holding the call you can carry it through a lot of things that would normally cancel it:
- Driving a vehicle
- Failing missions, going through some cutscenes
- Using most weapons
- You can't aim and shoot properly, since aiming will immediately shoot
- You will keep shooting unless you move or switch weapons
- Using a viewfinder (e.g. aiming with the Sniper Rifle or Rocket Launcher) seems to have the same effect as letting go of holding the call (answer or cancel it)
Letting go of holding the call will answer the call (CJ picks up the phone and the conversation starts, the call won't be available after that) only when:
- You're not in an interior
- You're not in a vehicle
- You're currently on $ONMISSION=1 (so if you try to answer a held call with $ONMISSION=0, it will just cancel it)
Otherwise it will just cancel the call immediately (but still set $ONMISSION=0, since even cancelling a ringing phone will do that, the call will still be available after that).
Problems with holding calls
You have to make sure that the button you use for holding calls actually works in all situations:
- Your keyboard may not support some buttons to be held at the same time. Example: Holding Shift and pressing a NumPad-number button lets go off Shift, even though you're still physicially holding it. However with disabling NumLock it works. This is just an example, it may be different for your setup.
- The game sometimes seems to remove keypresses when cancelling cutscenes. This appears to apply to all keys, however holding some keys will immediately recognize the keypress again after a fraction of a second, whereas all other keys just don't recognize the keypress anymore (until you let go and press it again). This can be important if you need to hold a call that starts ringing right after a cutscene. Shift (Left and Right) and mousebuttons seem to work best for this.
Perform thorough tests to make sure holding calls works with your setup:
- Receive and hold a call and perform all the actions you normally would, including everything you would do in a car like drive-by shooting. Then check if the call is still there. When you are using a regular (not $ONMISSION=0) call, you can easily tell if the call is still held by the mission markers not being there. This is to make sure that all keys you are using work with the key you use to hold the call.
- Practice all the dupes and setups.
Related Resources
- Holding calls is used for Duping
- Video on how to hold calls in vehicles
List of Calls
The following threads, which are started/stopped as the game progresses, are used to check for different groups of phonecalls (check delay in ms):
- MOB_LA1 (90)
- MOB_CAT (120)
- MOB_SF (150)
- MOB_VEG (180)
- MOB_LA2 (250)
- MOB_RAN (1000)
- MOB_GF (150)
Each thread checks independantly every x ms (as noted in the list above) if the recall time has passed and the prerequisites for calls are met. This means that if calls from different threads are available, calls can come in a somewhat random order, although calls from threads that are checked with a smaller delay probably have a higher chance of getting in first.
In the table the number behind the thread name (e.g. MOB_RAN(3)) is the order the calls are checked in that thread, which means you receive calls with a smaller number first if several are available. It doesn't necessarily mean that the calls will actually come in that order, since that depends on which ones are unlocked.
The mission name behind a given prerequisite shows the mission that the game expects to have been be passed.
This list is not necessarily complete (the MOB_GF thread hasn't been added yet). The prerequisites and results info of a call may not be entirely complete (which would basicially require posting the code in here), but the relevant stuff should mostly be in there.
If the Unlocks column says "Mission Marker/Unlock (Mission Name)" then the variable that is said if the call was answered is also checked for starting that mission, which means it doesn't just create the marker, but also actually unlocks the mission. If it doesn't say "Unlock", the call might not be responsible for unlocking the mission, however it might also mean that this call merely hasn't been checked for that yet.
The call IDs are taken from the mission script. Call IDs that are shown in bold are calls that usually come up in any% runs.
ID | From | Quote | Prerequisite | Call Unlocks/Info | Thread |
---|---|---|---|---|---|
11 | Kendl | "Loser!" | Lowrider Race Failed | MOB_RAN(1) | |
14 | Big Smoke | "Yo Carl, it's Smoke." | $MISSION_RUNNING_DOG_FAILED == 1 and $SMOKE_TOTAL_PASSED_MISSIONS == 1 and $STAT_FAT >= 500.0 | MOB_RAN(2) | |
1 | Catalina | "PIG!" | $WUZIMU_TOTAL_PASSED_MISSIONS > 1 (Ran Fa Li) | MOB_RAN(3) | |
2 | Catalina | "Tiny-balled idiota!" | $TORENO_TOTAL_PASSED_MISSIONS > 5 (N.O.E.) | MOB_RAN(4) | |
3 | Catalina | "I know it's you, you stinking perro!" | $CASINO_TOTAL_PASSED_MISSIONS > 5 (The Meat Business) | MOB_RAN(5) | |
4 | Catalina | "Hello, Claude, baby." | $MANSION_TOTAL_PASSED_MISSIONS > 2 (Home Coming) | MOB_RAN(6) | |
5 | Catalina | "Yes, Claude, faster, harder, DEEPER!" | $RIOT_TOTAL_PASSED_MISSIONS > 4 (End of the Line) | MOB_RAN(7) | |
44 | Toreno | "Hey, how's the flying coming along?" | $FLIGHT_SCHOOL_BRIEF_PLAYED == 1, $MISSION_LEARNING_TO_FLY_PASSED == 0 |
MOB_RAN(8) | |
45 | Toreno | "Beat your fears, focus your mind and learn to fly." | $FLIGHT_SCHOOL_BRIEF_PLAYED == 1, $MISSION_LEARNING_TO_FLY_PASSED == 0, $1373 == 1(call 44 taken) |
MOB_RAN(9) | |
46 | Toreno | "Carl, learn to fly." | $FLIGHT_SCHOOL_BRIEF_PLAYED == 1, $MISSION_LEARNING_TO_FLY_PASSED == 0, $1374 == 1(call 45 taken) |
MOB_RAN(10) | |
54-69 | Loanshark | "Hey, Mr. Johnson. Just a friendly reminder that you owe me money." | $CURRENT_TOWN_NUMBER == 3, not Player.Money($PLAYER_CHAR) > -499 |
MOB_RAN(11) | |
19 | Sweet | "Thought I'd explain some shit." | $INTRO_TOTAL_PASSED_MISSIONS > 0, 2 > $SWEET_TOTAL_PASSED_MISSIONS, $HELP_GROOVE_SHOWN == 3 |
MOB_LA1(1) | |
9 | Crash | "Carl, it's officer Hernandez" | $SWEET_TOTAL_PASSED_MISSIONS > 0 (Tagging up Turf) | MOB_LA1(2) | |
6 | OGLoc | "Hey CJ, word up, G!" | $OG_LOC_TOTAL_PASSED_MISSIONS == 4 (House Party (Cutscene)), ($TIME_HOURS >= 20 or 6 > $TIME_HOURS) |
MOB_LA1(3) | |
20 | Sweet | "There's a gym I go to a couple of blocks out from the Grove." | $SWEET_TOTAL_PASSED_MISSIONS > 2, 450.0 > $STAT_FAT | Gym | MOB_LA1(4) |
21 | Sweet | "So I put a little weight on, but...." | $SWEET_TOTAL_PASSED_MISSIONS > 2, $STAT_FAT >= 450.0 | Gym | MOB_LA1(4) |
12 | Crash | "Officer Tenpenny. How'd you get my number?" | $OG_LOC_TOTAL_PASSED_MISSIONS > 1 (Madd Dogg's Rhymes) | Create @CRASH Thread and Mission Marker | MOB_LA1(5) |
7 | Cesar | "What's up homie? It's Cesar Vialpando cabron, que honda?" | $SWEET_TOTAL_PASSED_MISSIONS > 6 (Cesar Vialpando) | Create @CESAR Thread and Marker | MOB_LA1(6) |
18 | Sweet | "Whattup, Sweet?" | $SWEET_TOTAL_PASSED_MISSIONS > 6 (Cesar Vialpando), $CRASH_LS_TOTAL_PASSED_MISSIONS > 0 (Burning Desire) |
Mission Marker/Unlock (Doberman) | MOB_LA1(7) |
8 | Cesar | "My cousin. Really intense, holmes. Trust me." | $MISSION_BADLANDS_PASSED > 0 (Badlands) | Create @CAT Thread and Catalina Marker | MOB_CAT(1) |
24 | Sweet | "Don't worry bro, I ain't gonna leave you in there." | $MISSION_BADLANDS_PASSED > 0 (Badlands) | MOB_CAT(2) | |
15 | The Truth | "You know me. This is The Truth." | $TRUTH_TOTAL_PASSED_MISSIONS == 0, $CATALINA_TOTAL_PASSED_MISSIONS == 1 | Create @TRU Thread, Marker | MOB_CAT(3) |
0 | Catalina | "Get your ass up here, now!" | $CATALINA_TOTAL_PASSED_MISSIONS == 3 | MOB_CAT(4) | |
10 | Cesar | "Just get a fast car and meet me and Kendl just south of Montgomery." | $CATALINA_TOTAL_PASSED_MISSIONS > 1, $CESAR_TOTAL_PASSED_MISSIONS == 0 | Create @BCESAR Thread and Badlands Race Marker | MOB_CAT(5) |
16 | The Truth | "Prank caller! Prank caller!" | $CATALINA_TOTAL_PASSED_MISSIONS > 3, $CESAR_TOTAL_PASSED_MISSIONS > 9 | Mission Marker, set_max_wanted_level_to 5 | MOB_CAT(6)
|
34 | Woozie | "I own a little betting shop in Chinatown." | $SYNDICATE_TOTAL_PASSED_MISSIONS > 2 (Jizzy) | Starts @WUZI Thread | MOB_SF(1) |
29 | Zero | "Sorry, Carl, are you busy?" | $GARAGE_TOTAL_PASSED_MISSIONS > 0 (Wear Flowers in your Hair) | Create @BUY2 Thread, Zero Asset available to buy | MOB_SF(2) |
30 | Zero | "Carl! It's Zero!" | $GARAGE_TOTAL_PASSED_MISSIONS > 0 (Wear Flowers in your Hair), $ZERO_RCSHOP_BOUGHT == 1 |
Create @ZERO Thread, Mission Marker | MOB_SF(3) |
31 | Jethro | "Driving school? Man, exactly what you trying to say, man?" | $GARAGE_TOTAL_PASSED_MISSIONS > 1 (Deconstruction) | Create @TRACE, @BSCHOO, @BIKES Threads, Mission Markers | MOB_SF(4) |
32 | Jethro | "There's an unofficial street racing club in San Fierro." | $MISSION_BACK_TO_SCHOOL_PASSED == 1, $TORENO_TOTAL_PASSED_MISSIONS > 3 (Verdant Meadows) |
Street Races | MOB_SF(5) |
33 | Jethro | "Now there's a showroom round the block that's come up for sale" | $1404 == 1 (Monster Call Taken), $MISSION_BACK_TO_SCHOOL_PASSED == 1 | Create @BUY1 Thread (Wang Cars) | MOB_SF(6) |
41 | Toreno | "This is a friend of yours." | $SYNDICATE_TOTAL_PASSED_MISSIONS == 10 (Yay Ka-Boom-Boom) | Create @DESERT Thread and Toreno Marker, creates Toreno Savepickup | MOB_SF(7) |
42 | Toreno | "Son, get back to the ranch and I'll explain everything." | $TORENO_TOTAL_PASSED_MISSIONS > 0 (Monster) | Mission Marker/Unlock (Highjack) | MOB_SF(8) |
43 | Toreno | "Here. Now. Don't screw around." | $TORENO_TOTAL_PASSED_MISSIONS > 1 (Highjack) | Mission Marker/Unlock (Interdiction) | MOB_SF(9) |
35 | Woozie | "It's the Four Dragons Casino in Las Venturas." | $MISSION_LEARNING_TO_FLY_PASSED > 0 | Restart Thread @MOB_VEG, Casino Savepoint, Garage.Activate('VECMOD'), Create @LITCAS Thread | MOB_SF(10) |
17 | The Truth | "Carl. It's me. The Truth. We got a date with destiny, man" | $TORENO_TOTAL_PASSED_MISSIONS > 7 (Black Project) | Mission Marker/Unlock (Green Goo) | MOB_VEG(1) |
13 | Crash | "Carl! You get that dossier?" | $CASINO_TOTAL_PASSED_MISSIONS > 7 (Freefall), $598 > 0 (after Misappropriation) |
Mission Marker/Unlock (High Noon) | MOB_VEG(2) |
47 | Paul | "Awright, Carl - it's me, Paulo." | $CASINO_TOTAL_PASSED_MISSIONS > 3 (Don Peyote) | Mission Marker/Unlock (Intensive Care) | MOB_VEG(3) |
48 | Rosenberg | "He's taken over Caligula's!" | $CASINO_TOTAL_PASSED_MISSIONS > 6 (Fish in a Barrel) | Mission Marker/Unlock (Freefall) | MOB_VEG(4) |
49 | Rosenberg | "You've hung us out to dry, I know it!" | $CASINO_TOTAL_PASSED_MISSIONS > 7 (Freefall), $598 > 1 (High Noon), $599 > 0 (Madd Dogg), $TORENO_TOTAL_PASSED_MISSIONS > 8 (Green Goo) |
Mission Marker/Unlock (Saint Mark's Bistro) | MOB_VEG(5) |
53 | Millie | "Millie, girl, you will NOT regret this!" | $HEIST_TOTAL_PASSED_MISSIONS > 1 (Key to her Heart), not test $390 bit 1, $STAT_PROGRESS_WITH_MILLIE >= 35 |
Create Keycard Pickup, create_thread @KEYCARD | MOB_VEG(6) |
39 | Woozie? | "It's Millie, she's dumped me." | $HEIST_TOTAL_PASSED_MISSIONS > 1 (Key to her Heart), not test $390 bit 1, $GIRL_PROGRESS[5] == -100 |
Create Keycard Pickup, create_thread @KEYCARD | MOB_VEG(7) |
40 | Woozie? | "It's Millie, she's dead." | $HEIST_TOTAL_PASSED_MISSIONS > 1 (Key to her Heart), not test $390 bit 1, $GIRL_PROGRESS[5] == -999 | ||
36 | Woozie? | "You get that pass key yet?" | $HEIST_TOTAL_PASSED_MISSIONS > 4 (Up, Up and Away!), $37 == 0, $1384 == 0 |
MOB_VEG(8) | |
51 | Leone | "You won't be hearing from Mr. Rosenberg again." | $CASINO_TOTAL_PASSED_MISSIONS > 8 (Saint Mark's Bistro), $HEIST_TOTAL_PASSED_MISSIONS != 6 (Heist not done) | MOB_VEG(9) | |
38 | Woozie? | "Are we doing this heist or are you going soft on me again." | $CASINO_TOTAL_PASSED_MISSIONS > 8 (Saint Mark's Bistro) | Mission Marker if $37 == 1 (Keycard acquired) | MOB_VEG(10) |
37 | Woozie? | "Get back to the Four Dragons and we can get on with this thing!" | $CASINO_TOTAL_PASSED_MISSIONS > 8 (Saint Mark's Bistro), $1384 == 0 (call 38 taken without Keycard acquired), $37 == 1 (Keycard acquired) |
Mission Marker | MOB_VEG(11) |
52 | Leone | "You two-bit, backstabbing, piece of eggplant shit!" | $HEIST_TOTAL_PASSED_MISSIONS > 5 (Breaking the Bank at Caligula's) | MOB_VEG(12)
| |
50 | Rosenberg | "Fucking amazing!" | $MANSION_TOTAL_PASSED_MISSIONS > 0 (A Home in the Hills) | Mission Marker (Vertical Bird) | MOB_LA2(1) |
25 | Sweet | "Carl, what's up? It's your brother." | $CASINO_TOTAL_PASSED_MISSIONS > 2 (You've had your Chips), 2 > $MANSION_TOTAL_PASSED_MISSIONS (before Vertical Bird) |
MOB_LA2(2) | |
22 | Sweet | "CJ, I been thinking." | $RIOT_TOTAL_PASSED_MISSIONS > 1 (Los Desperados) | Gang Territories | MOB_LA2(3) |
23 | Sweet | "Hey wassup, you find Smoke?" | $RIOT_TOTAL_PASSED_MISSIONS > 1 (Los Desperados), $GS_GANG_TURF_CONTROLLED > 34 |
End of the Line | MOB_LA2(4) |