A text regarding the thought process on building Shion Yorigami in GTA San Andreas
When I first started modding the Yorigami Perks and Points system for GTA San Andreas, I never imagined I would end up creating an entire companion system for Shion with Jo'on as the player protagonist.
It started simply because I insist on wearing Jo'on's skin via Skin Selector as I test the mod's perks, and I wanted a homie to accompany me. It felt weird to have Sunny Milk follow me around, so I would spawn a Shion-skinned ped and have her act as my bodyguard.
However, the process of pressing TAB+Q+E and navigating menus to spawn a specific ped each time got tedious. So, I made a quick script named SpawnShion.cs. Typing SHION would instantly spawn the ped with Shion's skin, already in your group, and armed with a scoped rifle.
That's all that script was for... until I thought: "Wouldn't it be funny if she actually talks to Jo'on? Like Inigo in Skyrim?"
That's how this all started. I ended up spiraling into hooking up specific contexts into branching dialogues, and more than just dialogues, some actual functional mechanics around Shion. The mod suddenly had nested folders, and my head just couldn't stop popping out ideas that I could not bear to leave unwritten.
The following is my thought process on translating Shion Yorigami's character and abilities into the GTA San Andreas engine.
Reducing navigation frictions via Hitodama form
Homies get stuck. I didn't want Shion to get stuck. So I am really glad it's canon that she has a form where she floats with blue ghostly tails instead of legs.
Because it was too complex to make a custom model and animation for that, it was a lot simpler to just spawn a cluster of blue floating coronas tethered to Jo'on's coordinates: a blue Hitodama. The primary inspiration was re_ghotion's cute art of little hitodama Shion.
You can toggle Shion's form between physical and hitodama with Y+H.
In Hitodama form, Shion is not a physical ped in the game engine. Jo'on can traverse terrain in any way she wants without needing to wait for a struggling ped to navigate fences or walls. In exchange for not being able to shoot guns, Hitodama Shion can absorb damage that would otherwise hurt Jo'on's lifebar.
Best of all, Shion's Hitodama form solves the problem of vehicles with no passenger seats. I once lamented that I could never have a scenario where Jo'on and Shion ride a Rhino tank or a Hunter chopper and scorch the city because they only have one seat. With Hitodama mode, she still accompanies you in spirit, quipping and complaining about the situation. Jo'on never has to be alone.
Vanilla combat frustrations with red-marked peds
Another thing I didn't like about vanilla homies is that they don't normally target red-marked peds during missions. They only ever shoot a ped if you attack them first. Furthermore, in certain missions, Rockstar hardcoded those red-marked peds so they can only be killed by the player. You would see a homie dump their entire mag and not deal a single point of damage.
My ShionCombatRedMarker script circumvents that. Purely because during the Pimping side-mission, I wanted to simply drive around as Jo'on and have Shion in the passenger seat be the one to snipe the deadbeat client dead with a scoped rifle so Jo'on didn't have to get out of her ride to beat them to the ground herself.
It makes Shion incredibly useful in Vigilante or story missions that feature red targets. I actually made a standalone version of this exact script to apply to normal companions, because it's just that useful to me. I have both running at the same time; normal homies and Shion all function to kill every red-marked ped in sight, whether we are on foot or on wheels.
Now does this have anything to do with Shion's character? No. But I don't appreciate her being disobedient when Jo'on clearly said kill (Y+B).
Real effects on weapon economy via Wallet Drain & Gear Swap
Normally when you recruit homies, they have 9999 ammo for whatever they are holding. I wanted Shion to have a real effect on the weapon economy and make Jo'on spend money because nothing comes for free, so I coded two ways that happens:
- Wallet Drain: Retroactive purchasing of ammo. Shion can fire endlessly provided you can afford each shot. For instance, if you buy a Scoped Rifle at Ammu-Nation with 10 rounds for $5,000, that is $500 per shot. When Shion fires that rifle, each shot drains $500 directly out of your wallet. In order to stay in the green, you have to use perks like
Shakedown,Midas Magnet, andPestilence Feverto keep her topped up. If a shot puts you at $0 or in the negatives, Shion immediately stops shooting, clicks empty, and switches to peaceful mode. (Note: IfDURGASTRAmode is on, she can keep shooting into infinite negative debt, like an open credit tab). - Gear Swap: Closer to reality. Jo'on simply gives Shion a gun with its physical ammo pool (
Y+R). If Jo'on has 100 sniper rounds, Shion gets exactly 100 rounds. You can top her up by handing her the same weapon again. This mode is friendlier for alternative, less costly playthroughs. You just do an ammo run looting the map of weapon pickups and hand her a gun with 500 rounds. - But you're Jo'on Yorigami. Why would you be thrifty with ammo? Spend your damn money, ya penny pincher!
Innate misfortune and aura stacking
While I originally implemented perks like Misfortune, Traffic Hex, Aviation Misfortune, and Misery Loves Company for the player, I figured that Shion as a companion should innately have those in effect.
If CJ or Jo'on invest points in Shion's perk tree, they benefit from them personally. But Shion by herself has these effects innately, whether you are broke or not. If someone physically harms Shion, the damage is reflected back to the attacker. If it takes four 9mm rounds to kill a normal 100 HP ped, it only takes Shion taking four shots to the gut to drop them without lifting a finger.
This way, if you play a pure Jo'on build, you don't really need to invest in Shion's perk tree to get her utility. But having the option means Jo'on can get double the benefits: channeling Shion's divinity to tip the odds in her favor, while Shion herself radiates bad luck from the passenger seat.
Hunger, feeding, and scavenging
I wanted to ask: "What are some things CJ experiences that I can make a ped companion experience?"
Every 48 hours, just like CJ, Shion gets hungry. I didn't make a penalty out of it (like losing HP) because I don't want to frustrate the player or lock away her features. The only thing hunger prevents is Shion starting a Sister Talk lore episode. (There is also a setting in shion.ini to disable the hunger mechanic entirely).
Feeding Her: If you drive to a fast food place or walk indoors to a diner, pressing TAB opens a menu to buy her food.
- Spending $1 to $100 tops up her 1,000 HP and 500 Armor to full. Yes, even a $1 Sprunk maximizes her health.
- Spending $20 or more resets the player's own hunger timer, because in that context they are sharing the meal.
- There is not much mechanical benefit to giving Shion the maximum $100. However, it accumulates a tracker of how much you spent on her. Reach a certain threshold, and Shion starts commenting on how much Jo'on has spent feeding her. Adding this feature delights me, because it is a dream for any Shion fan to provide for her. The drawback is that you have to do it through Jo'on's wallet and mean mouth.
Scavenging (gated by pride): I refined the Scavenger's Feast perk to be mode dependent. Shion innately has the ability to scavenge dumpsters and vending machines (Y+Z), so if you have her in your group, you don't really need to invest in this perk.
If you are playing as Jo'on, you literally cannot scavenge. Her pride won't let her. Pressing F near a bin only makes her complain about being above such things. If Jo'on is broke, and she refuses to scavenge, she has no way to reset her own hunger timer. She depends entirely on Shion to dig through the trash or beg cart vendors for scraps and feed her.
So to use this perk yourself, you have to be either CJ or Shion as the player character to roleplay the life of a penniless vagrant.
Parachutes, burglary, and sandbox reactions
Finally, I wanted to see what other CJ mechanics I could map onto her.
Parachuting: The first time I bailed out of a plane high up in the sky, the game automatically gave me a parachute because it detected I was piloting an aircraft. But Shion? The vanilla game has no parachute logic for followers, so she eventually splatted on the ground.
I felt compelled to make her survive the drop, ensuring she could accumulate the same gameplay experiences a real player would. I initially checked
main.scmto see how Rockstar scripted the Triads jumping from a plane during the mission Home In The Hills, but I hit a dead end trying to adapt that scripted sequence into generic companion AI, so I shelved the idea for a while.The breakthrough came completely by accident. Later in development, while flying around as Jo'on testing perk effects with my Touhou skins, I suddenly witnessed a random Seiran ped parachuting down from the sky. And then... The Rabbit Has Landed. Jo'on naturally proceeded to beat Seiran up and steal her parachute.
I checked my install to figure out what spawned her, traced it back to Artem.1.9.9.6's Busy Pedestrians: Peds Events Project mod, and studied the logic of its parachute script. Borrowing that approach, I finally got Shion's parachute script working.
While it is technically easier to just keep Shion in Hitodama Form so she ignores fall damage entirely during skydiving, taking the extra effort to let physical Shion parachute down beside you and land safely on her own two feet unlocks a Sister Talk episode right when you regroup on the ground.
Burglary: I tried to make Shion physically pick up a large CRT Television and walk to the door, and then to the back of the boxville, each time incrementing the burglary swag counter through script variable manipulation. However, the game engine only flags items you personally pick up as "taken." If Shion picked it up, she could infinitely steal from the same invisible TV and rack up your score.
So I pivoted to another idea: Shion is your courier. You pick an item, pressTAB, and Shion warps away with it, hauling the loot to the van while complaining about her spine, and warps back a few seconds later. It makes Burglary so much fun. I don't need to run in and out of a house anymore, and I actually bother to clear the house and move to the next house rather than using a 2-house exploit where if you enter another house, it resets the first one, and you can just loop back and forth infinitely looting the same spot again and again.Sandbox Reactions: I wanted Shion to react to the immediate reality of the game world. The joke I am most delighted to have made reality is Jo'on getting inside a firetruck and blasting Shion with the water turret. Other than that, Shion will comment whenever you punch an innocent person, submerge your car in water, or use the Pay N' Spray and marvel at how ridiculous it is to completely repair a smoking engine with only the sound of spray paint.
Hm, that's all my brain could dig up for now. There may have been things I forgot to mention.
It was an incredibly fun 60-days, and I am still not done with it.
I slowed down from adding things, and I am more focused on refactoring, refining and debugging already existing features from edge cases I might have missed. Call it feature-creep, but it is enjoyable to expand Shion's awareness and capabilities within the sandbox one commit at a time.
-- EagleRaviOrange