News: Welcome back to Bullworth! If you haven't already, you will need to reset your password..


Show Posts

Messages | * Topics | Attachments

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - DaBOSS54320

Pages: 1 [2] 3 4 ... 6
16
Resolutions / Difference between red/bold topic titles?
« on: February 02, 2015, 02:56:48 PM »
Some titles of topics are bold because they are pinned, and some are red because they are also pinned. The non pinned ones are not bold and are also not red. What's the difference between the red ones, and the just-bold ones?


17
Script Modding / LUA Buttons Explanation
« on: January 24, 2015, 02:33:47 PM »
I would like to clear up something that I see a lot of modders getting confused on regarding how the buttons work in Bully. How the "IsButtonBeingPressed", "IsButtonPressed", and "IsButtonBeingReleased" works.

If you've modded scripts for the game before, I'm sure you know how they work. Put a button number in the first argument (first number in the parenthesis) and a 0 as the 2nd. There seem to be 2 common confusions/misunderstandings though that I see and wanna clear up...

"The first number is the exact button or key that needs to get pressed, like the button Y or the key Shift"
"The second number is 0 for keyboard and 1 for an XBox360"

If you believe in either of the 2 above statements... keep reading as this will really help you.

First off, the button is something 0-15. Now... these buttons 0-15 do NOT correspond to a button on the controller, or key on the keyboard exactly. They correspond to actions that they do, such as jumping, attacking, pausing, sprinting, looking through missions and side missions, getting in vehicles, etc. So for example, the number 8 IS the button to jump. It is not exactly just "B" or "Spacebar". So for example if someone changed their control plot or button setup for Shift to jump and Spacebar to attack, then 8 (The jumping button) would become "Shift" instead of "Spacebar". The one number, also works for both the keyboard and xbox controller. There is not separate buttons for the xbox controller. 8 is jumping on both. So again, if the xbox player changes his control plot for like A to be jump, then 8 would be A for that person. If they changed it back to B, then 8 would be B.

Second, the controller should be 0 or 1 (I haven't tried past 1 as I don't have a 3rd controller... but usually you wouldn't need to anyways) 0 is Player1. It's not exactly meaning the keyboard, or the xbox controller. It's whatever input device is controlling Jimmy. So if you have an xbox controller in AND are using it to control Jimmy, then the xbox controller is Player1 and is thus the controller 0. If you have an xbox controller plugged in and are using the keyboard instead to control Jimmy as you took off the xbox control in settings, then the keyboard is now controller 0 as it is what controls Jimmy. The keyboard or controller NOT controlling Jimmy, would be Player2, meaning controller id 1. When making mods to be released, be mindful of people who may not have both a keyboard and controller and for people who can't easily use both at the same time for whatever reason. Usually, it'll just be best to use 0. Again, 0 is whatever is controlling the player! That can be either the keyboard OR xbox controller, it doesn't matter which either, because it is the device controlling Jimmy, and also because remember, both have the same 0-15 buttons that are actually binded to the actions of things Jimmy does rather than exact keys/buttons.


Here's a list of buttons too for anyone who needs it. One that is properly titled with the actions, rather than keys/buttons.

0   Show Secondary Tasks
1   Show Tasks/Objectives
2   Zoom in
3   Zoom out
4   Map Menu
5   Pause Menu
6   Melee Attack
7   Sprint
8   Jump
9   Grapple
10   Lock On
11   Previous Weapon
12   Weapon Fire
13   Next Weapon
14   Look Back
15   Crouch

18
Script Modding / Quickly compile & install LUA mods!
« on: January 13, 2015, 06:44:13 PM »
The executable was made by |XF|-MadmaN [AR]! All I did was make the batch file for this and help show how to use the fabulous tool.

This is meant for modders who make mods, not for people who just download/play mods.

This is a basic, yet very useful setup for doing LUA mods for Bully. If you don't want to use it exactly, you can probably still look at how it works and adopt how it works for yourself.
This just simply gives you a setup for LUA modding with a compiler, IMG tool, some mod examples, and some templates. It also includes a very very quick way to compile your scripts and add them/install them to the Scripts.img in a fraction of a second!
No more tedious opening of the command prompt and IMG tool and manual compilation and installation.

If you take a long time to compile your mods and find it annoying to add them to the Scripts.img every time, or just feel like your modding folder is messy and/or inefficient, this is for you!

Get it here!

19
Script Modding / LUA Action Nodes
« on: January 08, 2015, 01:50:59 AM »
Make sure to load the animations for the nodes to work in your mods.


Action Nodes List (As of 3/4/2015) (Horribly outdated, check replies in this topic for more)
Code: [Select]
"Adult Takedown", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/Adult_Takedown/Give","Act/Globals.act"
"BOSS_Darby 6 Hit Combo", "/Global/BOSS_Darby/Offense/Short/Grapples/HeavyAttacks/Catch_Throw","Act/Anim/BOSS_Darby.act"
"BOSS_Darby Hopback Evade", "/Global/BOSS_Darby/Offense/NonCombatActions/Hopback","Act/Anim/BOSS_Darby.act"
"B_Striker_A 1st Punch", "/Global/B_Striker_A/Offense/Short/Strikes/LightAttacks/Windmill_R","Act/Anim/B_Striker_A.act"
"B_Striker_A Gut Kick", "/Global/B_Striker_A/Offense/Short/Strikes/HeavyAttacks/GutKick/GutKick_R","Act/Anim/B_Striker_A.act"
"B_Striker_A Swing Punch", "/Global/B_Striker_A/Offense/Short/Strikes/HeavyAttacks/SwingPunch/SwingPunch_R","Act/Anim/B_Striker_A.act"
"Back Breaker", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/Backbreaker","Act/Globals.act"
"Bear Hug", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/BearHug","Act/Globals.act"
"Body Slam", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/BodySlam","Act/Globals.act"
"Bullying Attack", "/Global/Ambient/SocialAnims/SocialHumiliateAttack/AnimLoadTrigger","Act/Anim/Ambient.act"
"Busting Hold", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/Punishment_Hold/Give","Act/Globals.act"
"Chit Chat", "/Global/Ambient/SocialAnims/SocialChitChat/PlayAnim","Act/Anim/Ambient.act"
"Directional Push", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/DirectionalPush","Act/Globals.act"
"G_Johnny Overhead Kick Combo", "/Global/G_Johnny/Offense","Act/Anim/G_Johnny.act"
"G_Striker_A Wipe Face", "/Global/G_Striker_A/Offense/Taunts/Taunt_A","Act/Anim/G_Striker_A.act"
"Grapple Attempt", "/Global/Actions/Grapples/Front/Grapples/GrappleAttempt","Act/Globals.act"
"Grapple Strike A", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitA","Act/Globals.act"
"Grapple Strike B", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitB","Act/Globals.act"
"Grapple Strike C", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitC","Act/Globals.act"
"Hold Idle", "/Global/Actions/Grapples/Front/Grapples/Hold_Idle","Act/Globals.act"
"Insult", "/Global/Ambient/SocialAnims/SocialInsult1/SocialInsult1","Act/Anim/Ambient.act"
"Laugh 2", "/Global/Ambient/Reactions/HumiliationReact/Laughing/Guy_Laugh/Laugh02","Act/Anim/Ambient.act"
"Mermaid", "/Global/Freaks/Mermaid/MermaidIdle","Act/Anim/FreakShow.act"
"Nemesis 2 heavy punch", "/Global/Nemesis/Offense/Short/Strikes/HeavyAttacks/HeavyPunch1","Act/Anim/Nemesis.act"
"Nemesis Gut Kick", "/Global/Nemesis/Offense/Medium/Strikes/HeavyAttacks/JackieKick","Act/Anim/Nemesis.act"
"P_Striker_A Evade", "/Global/P_Grappler_A/Defense/Evade/EvadeBack/Evade","Act/Anim/P_Grappler_A.act"
"P_Striker_A Hopback", "/Global/P_Grappler_A/Offense/NonCombatActions/Hopback","Act/Anim/P_Grappler_A.act"
"P_Striker_A Kick", "/Global/P_Grappler_A/Offense/Medium/Strikes/Kick","Act/Anim/P_Grappler_A.act"
"Player Running Attack", "/Global/Player/Attacks/Strikes/RunningAttacks/HeavyAttacks/RunShoulder","Act/Player.act"
"Power Bomb", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/PowerBomb/Give","Act/Globals.act"
"Prefect Bust", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/Tonfa_Impale/TonfaImpale","Act/Globals.act"
"Puke", "/Global/Ambient/Reactions/Puke/Vomit","Act/Anim/Ambient.act"
"Reversal Punches", "/Global/Actions/Grapples/GrappleReversals/MountReversals/MountReversalPunches/GIVE","Act/Globals.act"
"Reversal Push", "/Global/Actions/Grapples/GrappleReversals/StandingReversals/GrappleBreak/Break_GIVE","Act/Globals.act"
"Running Punch", "/Global/Actions/Offense/RunningAttacks/RunningAttacksDirect","Act/Globals.act"
"Secretary Bust", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/EarGrab/GIVE","Act/Globals.act"
"Take Down", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/TakeDown","Act/Globals.act"
"Take Down Large", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/TakeDown/If_Large/GIVE","Act/Globals.act"
"Take Down Attempt", "/Global/Actions/Grapples/RunningTakedown/Takedown_miss","Act/Globals.act"
"Tandem Grapple", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/TandemGrapple/TandemGrapple_ACTIVE/GIVE","Act/Globals.act"
"Wall Smash", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/WallSmash","Act/Globals.act"
"Want Gift", "/Global/Ambient/SocialAnims/SocialWantGift/WantGift/PLAY","Act/Anim/Ambient.act"
"Gut Kick", "/Global/B_Striker_A/Offense/Short/Strikes/HeavyAttacks/GutKick/GutKick_R","Act/Anim/B_Striker_A.act"
"Swing Punch", "/Global/B_Striker_A/Offense/Short/Strikes/HeavyAttacks/SwingPunch/SwingPunch_R","Act/Anim/B_Striker_A.act"
"1st Punch", "/Global/B_Striker_A/Offense/Short/Strikes/LightAttacks/Windmill_R","Act/Anim/B_Striker_A.act"
"2nd Punch", "/Global/B_Striker_A/Offense/Short/Strikes/LightAttacks/Windmill_R/Windmill_L","Act/Anim/B_Striker_A.act"
"Bring Down Reversal", "/Global/Actions/Grapples/GrappleReversals/StandingReversals/Sprawl/GIVE","Act/Globals.act"
"Mount Reversal Punches", "/Global/Actions/Grapples/GrappleReversals/MountReversals/MountReversalPunches","Act/Globals.act"
"Mount Reversal", "/Global/Actions/Grapples/GrappleReversals/MountReversals/MountReversalToPunch/GIVE","Act/Globals.act"
"Standing Grapple Push", "/Global/Actions/Grapples/GrappleReversals/StandingReversals/GrappleBreak/Break_GIVE","Act/Globals.act"
"Trip", "/Global/Ambient/HarassMoves/HarassShort/Trip","Act/Anim/Ambient.act"
"Laugh 1", "/Global/Ambient/Reactions/HumiliationReact/Laughing/Guy_Laugh/Laugh01","Act/Anim/Ambient.act"
"Laugh 2", "/Global/Ambient/Reactions/HumiliationReact/Laughing/Guy_Laugh/Laugh02","Act/Anim/Ambient.act"
"Insult", "/Global/Ambient/SocialAnims/SocialInsult1/SocialInsult1","Act/Anim/Ambient.act"
"Want Gift", "/Global/Ambient/SocialAnims/SocialWantGift/WantGift/PLAY","Act/Anim/Ambient.act"
"Chit Chat", "/Global/Ambient/SocialAnims/SocialChitChat/PlayAnim","Act/Anim/Ambient.act"
"Puke", "/Global/Ambient/Reactions/Puke/Vomit","Act/Anim/Ambient.act"
"Puke 2", "/Global/Ambient/Reactions/Puke/Vomit/Vomit2","Act/Anim/Ambient.act"
"Puke 3", "/Global/Ambient/Reactions/Puke/Vomit/Vomit3","Act/Anim/Ambient.act"
"Puke Vomit Stun", "/Global/Ambient/Reactions/Puke/Vomit/Vomit3/VomitStun","Act/Anim/Ambient.act"
"Special Puke", "/Global/Ambient/Scripted/SpecialPuke","Act/Anim/Ambient.act"
"Bullying Attack", "/Global/Ambient/SocialAnims/SocialHumiliateAttack/AnimLoadTrigger","Act/Anim/Ambient.act"
"Shoulder Barge", "/Global/P_Striker_A/Offense/Medium","Act/Anim/P_Striker_A.act"
"Evade Back Punch", "/Global/P_Striker_A/Defense/Evade/EvadeCounter/LightAttacks/EvadeBackPunch","Act/Anim/P_Striker_A.act"
"Finishing Cross", "/Global/P_Striker_A/Offense/Short/Strikes/LightAttacks/LeftHook/FinishingCross","Act/Anim/P_Striker_A.act"
"Jab", "/Global/P_Striker_A/Offense/Short/Strikes/LightAttacks/JAB","Act/Anim/P_Striker_A.act"
"Cross", "/Global/P_Striker_A/Offense/Short/Strikes/LightAttacks/JAB/Cross","Act/Anim/P_Striker_A.act"
"Left Hook", "/Global/P_Striker_A/Offense/Short/Strikes/LightAttacks/LeftHook","Act/Anim/P_Striker_A.act"
"Hopback", "/Global/P_Grappler_A/Offense/NonCombatActions/Hopback","Act/Anim/P_Grappler_A.act"
"Kick", "/Global/P_Grappler_A/Offense/Medium/Strikes/Kick","Act/Anim/P_Grappler_A.act"
"Right Cross", "/Global/P_Grappler_A/Offense/Short/Strikes/HeavyAttacks/RightCross","Act/Anim/P_Grappler_A.act"
"Left Down", "/Global/P_Grappler_A/Offense/Short/Strikes/HeavyAttacks/RightCross/LeftDown","Act/Anim/P_Grappler_A.act"
"Left Jab Head", "/Global/P_Grappler_A/Offense/Short/Strikes/LightAttacks/LeftJabHead","Act/Anim/P_Grappler_A.act"
"Left Jab Body", "/Global/P_Grappler_A/Offense/Short/Strikes/LightAttacks/LeftJabHead/LeftJabBody","Act/Anim/P_Grappler_A.act"
"Evade", "/Global/P_Grappler_A/Defense/Evade/EvadeBack/Evade","Act/Anim/P_Grappler_A.act"
"Nerd Flail", "/Global/N_Striker_B/Offense/Short/Strikes/HeavyAttacks/Flail","Act/Anim/N_Striker_B.act"
"Nerd Defense Flail", "/Global/N_Ranged_A/Defense/Flail","Act/Anim/N_Ranged_A.act"
"Kick taunt", "/Global/P_Grappler_A/Offense/Medium/Kick","Act/Anim/P_Grappler_A.act"
"2 light punch combo", "/Global/P_Grappler_A/Offense/Short/Strikes/ShortAttacks/LeftJabHead/LeftJabBody","Act/Anim/P_Grappler_A.act"
"2 heavy punch combo", "/Global/Nemesis/Offense/Short/Strikes/HeavyAttacks/HeavyPunch1","Act/Anim/Nemesis.act"
"Node", "/Global/Nemesis/Offense/Short/Strikes/HeavyAttacks/HeavyPunch2","Act/Anim/Nemesis.act"
"Node", "/Global/G_Striker_A/Offense/RisingAttacks","Act/Anim/G_Striker_A.act"
"Knee Combo", "/Global/Nemesis/Offense/Short/Strikes/LightAttacks/JAB/HeavyAttacks/SuperUppercut","Act/Anim/Nemesis.act"
"Knee", "/Global/Nemesis/Offense/Short/Strikes/LightAttacks/JAB/HeavyAttacks/SuperUppercut/Knee","Act/Anim/Nemesis.act"
"Gut Kick", "/Global/Nemesis/Offense/Medium/Strikes/HeavyAttacks/JackieKick","Act/Anim/Nemesis.act"
"Gut Punch(used in Nemesis)", "/Global/Player/Attacks/Strikes/LightAttacks/Left1/Right2/Left3/Right4/Release/GutPunch","Act/Player.act"
"Right Hook", "/Global/G_Striker_A/Offense/Short/Strikes/LightAttacks/RightHook","Act/Anim/G_Striker_A.act"
"Jumping Straight Gut Kick", "/Global/G_Striker_A/Offense/Medium","Act/Anim/G_Striker_A.act"
"Node", "/Global/G_Striker_A/Offense/Taunts/Taunt_A","Act/Anim/G_Striker_A.act"
"Node", "/Global/G_Striker_A/Offense/Short/Strikes/HeavyAttacks/HeavyKnee","Act/Anim/G_Striker_A.act"
"Node", "/Global/G_Striker_A/Offense/Short/Strikes/HeavyAttacks/HeavyKick","Act/Anim/G_Striker_A.act"
"Node", "/Global/G_Striker_A/Offense/Medium/Strikes","Act/Anim/G_Striker_A.act"
"Node", "/Global/G_Striker_A/Offense/Short","Act/Anim/G_Striker_A.act"
"Left Side Kick", "/Global/G_Melee_A/Offense/Medium","Act/Anim/G_Melee_A.act"
"Roundhouse", "/Global/G_Johnny/Offense/Medium/HeavyAttacks/RoundHouseKick","Act/Anim/G_Johnny.act"
"Overhead Kick Combo", "/Global/G_Johnny/Offense","Act/Anim/G_Johnny.act"
"3 Punch Combo", "/Global/G_Johnny/Offense/Short/Strikes/LightAttacks","Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Offense/Short/Strikes/LightAttacks/Punch_1/Punch_2/Punch_3/ShortJohnny","Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Offense/Short/Strikes/LightAttacks/JohnnyHook/JohnnyHook2/JohnnyStomach/ShortJohnny","Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Offense/Special/SpecialActions/LightAttacks/AxePunch1_Grap/AxePunch2_Grap/AxeKicks/AxeKicksFollowup/Spit/AxeKick_Grap","Act/Anim/G_Johnny.act"
"Back breaker", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/BackBreaker/Give","Act/Globals.act"
"Body Slam", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/BodySlam/Give","Act/Globals.act"
"2 Hit Combo", "/Global/J_Grappler_A/Offense","Act/Anim/J_Grappler_A.act"
"3 weak punch combo ALT", "/Global/Nemesis/Offense/Short/Strikes/ShortAttacks","Act/Anim/Nemesis.act"
"Gut punch + knee ALT", "/Global/Nemesis/Offense/Medium/Strikes/ShortAttacks","Act/Anim/Nemesis.act"
"2 heavy punch combo SHIFT", "/Global/Nemesis/Offense/Short/Strikes/HeavyAttacks/HeavyPunch1","Act/Anim/Nemesis.act"
"Node", "/Global/J_Striker_A/Offense/Medium/Grapples/GrapplesAttempt","Act/Anim/J_Striker_A.act"
"Node", "/Global/P_Bif/Offense/Medium/HeavyAttacks/StraightPunch","Act/Anim/P_Bif.act"
"Node", "/Global/P_Bif/Offense/Medium/HeavyAttacks/GutPunch","Act/Anim/P_Bif.act"
"Node", "/Global/P_Bif/Offense/Short/LightAttacks/Jab","Act/Anim/P_Bif.act"
"Node", "/Global/P_Bif/Offense/Short/LightAttacks/Jab/Cross","Act/Anim/P_Bif.act"
"Node", "/Global/P_Bif/Offense/Short/HeavyAttacks/LeftHook","Act/Anim/P_Bif.act"
"Node", "/Global/P_Bif/Offense/Short/HeavyAttacks/RightHook","Act/Anim/P_Bif.act"
"Node", "/Global/P_Bif/Defense/Evade/EvadeLeft/HeavyAttacks/EvadeRightPunch","Act/Anim/P_Bif.act"
"Node", "/Global/P_Bif/Defense/Evade/EvadeRight/HeavyAttacks/EvadeLeftPunch","Act/Anim/P_Bif.act"
"Node", "/Global/P_Bif/Defense/Evade/EvadeDuck/HeavyAttacks/EvadeDuckPunch","Act/Anim/P_Bif.act"
"Node", "/Global/P_Bif/Offense/Special/HeavyAttacks","Act/Anim/P_Bif.act"
"Node", "/Global/Nemesis/Offense/Medium/Strikes/LightAttacks","Act/Anim/Nemesis.act"
"Node", "/Global/Norton","Act/Anim/3_05_Norton.act"
"Node", "/Global/G_Johnny/Cinematic/ThroatGrab",     "Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Cinematic/ThroatGrab/Dash",   "Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Cinematic/ThroatGrab/Dash/ThroatGrab",   "Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Cinematic/ThroatGrab/Dash/ThroatGrab/ThroatGrab_Gv",   "Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Cinematic/ThroatGrab/Dash/ThroatGrab/ThroatGrab_Rcv",   "Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Offense/Special/SpecialActions/ExecuteNodes/DashLoco",    "Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Offense/Special/SpecialActions/Grapples/Dash",   "Act/Anim/G_Johnny.act")
"Node", "/Global/G_Johnny/Offense/Special/SpecialActions/Grapples/Dash/ThroatGrab/ThroatGrab_Gv",   "Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Offense/Special/SpecialActions/Grapples/Dash/ThroatGrab/ThroatGrab_Rcv","Act/Anim/G_Johnny.act"
"Node", "/Global/G_Johnny/Offense/Special/SpecialActions/Grapples/Dash/DashTired","Act/Anim/G_Johnny.act"
"Node", "/Global/Vehicles/Bikes/ExecuteNodes/Attacks/LeadPipe/SwingLeftExec","Act/Vehicles.act"
"Node", "/Global/Vehicles/Bikes/ExecuteNodes/Attacks/LeadPipe/SwingRightExec","Act/Vehicles.act"
"Node", "/Global/Player/Gifts/Errand_BUS_Drugs","Act/Player.act"
"Node", "/Global/Player/Gifts/Errand_RIC_Crab","Act/Player.act"
"Node", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitA/","Act/Grapples.act"
"Node", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitB/","Act/Grapples.act"
"Node", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitC/","Act/Grapples.act"
"Node", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitC/Charge","Act/Grapples.act"
"Node", "/Global/1_05/Anims/PissSelf/PeeSelf","Act/Conv/1_05.act"
"Node", "/Global/N_Earnest/Offense/ThrowBombs",  "Act/Anim/N_Earnest.act"
"Node", "/Global/N_Earnest/Offense/FireSpudGun",  "Act/Anim/N_Earnest.act"
"Node", "/Global/HitTree/Standing/PostHit/BellyUp","Act/HitTree.act"
"Node", "/Global/HitTree/Standing/PostHit/BellyDown","Act/HitTree.act"
"Node", "/Global/Actions/Grapples/Mount/GrappleMoves/Headbutt","Globals/DO_Striker_A.act"
"Node", "/Global/Ambient/HarassMoves/PinchBum/ButtPinch","Globals/Ambient.act"
"humilliate start", "/Global/Ambient/Puke/Vomit/","Globals/Ambient.act"
"running punch", "/Global/Actions/Offense/RunningAttacks/RunningAttacksDirect","Globals/GlobalActions.act"
"jimmy kick", "/Global/Actions/RisingAttacks/HeavyAttacks/RisingAttacks","Globals/G_Striker_A.act"
"mount", "/Global/Actions/Grapples/Mount/MountIdle","Globals/Wrestling1.act"
"6 hit reversal", "/Global/Actions/Grapples/GrappleReversals","Globals/GlobalActions.act"
"reversal", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/DirectionalPush/PushFwd/RCV","act/anim/Player.act"
"grab from behind", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/TandemGrapple/TandemGrapple_ACTIVE/GIVE","act/anim/Player.act"
"Node", "/Global/Actions/Offense/RunningAttacks/RunningAttacksDirect/Weapon/UNBLOCKABLE","Globals/GlobalActions.act"
"Node", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/WeaponSteal/Steal","Act/Globals/GlobalActions.act"
"Node", "/Global/WaterPipe/Actions/Attacks/HeavyAttacks","Act/Globals/GlobalActions.act"
"Node", "/Global/EdgarShield/Actions/Attacks/HeavyAttacks/Swing/Release/Swing","Act/Anim/DO_Edgar.act"
"punch 1/uppercut", "/Global/Player/Attacks/Strikes/LightAttacks","act/anim/Player.act"
"punch 2/leg sweep", "/Global/Player/Attacks/Strikes/LightAttacks/Left1/Right2","act/anim/Player.act"
"punch 3/heavy kick", "/Global/Player/Attacks/Strikes/LightAttacks/Left1/Right2/Left3","act/anim/Player.act"
"punch 4/roundhouse kick", "/Global/Player/Attacks/Strikes/LightAttacks/Left1/Right2/Left3/Right4","act/anim/Player.act"
"punch 5/overhead punch", "/Global/Player/Attacks/Strikes/LightAttacks/Left1/Right2/Left3/Right4/Release/GutPunch","act/anim/Player.act"
"running shoulder", "/Global/Player/Attacks/Strikes/RunningAttacks/HeavyAttacks/RunShoulder","act/anim/Player.act"
"ground kick", "/Global/Player/Attacks/GroundAttacks","act/anim/Player.act"
"punch 1/headbutt", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitA","act/anim/Player.act"
"punch 2/gutpunch", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitB","act/anim/Player.act"
"knee 3/face knee", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitC","act/anim/Player.act"
"knee against wall", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/WallSmash","act/anim/Player.act"
"2 punch/shove", "/Global/GS_Male_A/Offense/Short","act/anim/GS_Male_A.act"
"hair pull", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GirlFight/GirlFight_START","act/anim/GS_Female_A.act"
"3 punch", "/Global/Nemesis/Offense/Short/Strikes/LightAttacks/LeftHook/RightCross/HeavyAttacks/SuperUppercut","act/anim/Nemesis.act"
"2 heavy punch", "/Global/Nemesis/Offense/Short/Strikes/HeavyAttacks/HeavyPunch1/HeavyPunch2","act/anim/Nemesis.act"
"2nd heavy punch", "/Global/Nemesis/Offense/Short/Strikes/HeavyAttacks/HeavyPunch2","act/anim/Nemesis.act"
"2 punch + knee", "/Global/Nemesis/Offense/Short/Strikes/LightAttacks/JAB/HeavyAttacks/SuperUppercut/Knee","act/anim/Nemesis.act"
"punch + knee", "/Global/Nemesis/Offense/Medium/Strikes/LightAttacks/OverHandR/HeavyAttacks/Knee","act/anim/Nemesis.act"
"heavy kick", "/Global/Nemesis/Offense/Medium/Strikes/HeavyAttacks/JackieKick","act/anim/Nemesis.act"
"3 punch/2 heavy punch", "/Global/Nemesis/Offense/Short/Strikes","act/anim/Nemesis.act"
"punch + knee/ heavy kick", "/Global/Nemesis/Offense/Medium/Strikes","act/anim/Nemesis.act"
"rooftop grab", "/Global/Nemesis/Special/GarySpecialGrapple","Act/Anim/Nemesis.act"
"2 punch + heavy punch/kick", "/Global/B_Striker_A/Offense/Short/Strikes/LightAttacks/WindMill_R/WindMill_L","act/anim/B_Striker_A.act"
"heavy punch", "/Global/B_Striker_A/Offense/Short/Strikes/HeavyAttacks/SwingPunch/SwingPunch_R","act/anim/B_Striker_A.act"
"kick", "/Global/B_Striker_A/Offense/Short/Strikes/HeavyAttacks/GutKick/GutKick_R","act/anim/B_Striker_A.act"
"Russell walk style", "/Global/BOSS_Russell/Default_KEY/ExecuteNodes/Free/RunBasic","act/anim/BOSS_Russell.act"
"light punch", "/Global/BOSS_Russell/Offense/Short/Strikes/LightAttacks/OverHand","act/anim/BOSS_Russell.act"
"heavy punch", "/Global/BOSS_Russell/Offense/Medium/Strikes/HeavyAttacks","act/anim/BOSS_Russell.act"
"double axe handle", "/Global/BOSS_Russell/Offense/Medium/Strikes/Unblockable/DoubleAxeHandle","act/anim/BOSS_Russell.act"
"2 heavy punch/axe handle", "/Global/BOSS_Russell/Offense/Short","act/anim/BOSS_Russell.act"
"running headbutt", "/Global/BOSS_Russell/Offense/Special/Invincible/HeadButt/HeadButt_AnticStart/HeadButt_AnticCyc/HeadButt_RunCyc/HeadButt_Success/HeadButt_Success_Wall_Hit/HeadButt_Success_Wall_Hit_RCV","act/anim/BOSS_Russell.act"
"running grab", "/Global/BOSS_Russell/Offense/Special/Invincible/BarserkGrapple","act/anim/BOSS_Russell.act"
"chest counter", "/Global/BOSS_Russell/Defense/Evade/EvadeInterrupt/EvadeInterrupt","act/anim/BOSS_Russell.act"
"stomp", "/Global/BOSS_Russell/Offense/GroundAttack/GroundStomp1","act/anim/BOSS_Russell.act"
"taunt", "/Global/BOSS_Russell/Offense/CombatTaunt/Taunt","act/anim/BOSS_Russell.act"
"powerbomb", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/PowerBomb","Globals/BOSS_Russell.act"
"cutscene headbutt fast getUp", "/Global/6_02/SchoolGatesNIS/Russell/Russell01","Act/Conv/6_02.act"
"B_Striker_A combo 3 hit", "/Global/Russell_102/Offense/Short/Strikes/LightAttacks/WindMill_R/WindMill_L/HeavyAttacks/SwingPunch_R","act/anim/Russell_102.act"
"chest counter", "/Global/Russell_102/Offense/Short/Medium/RisingAttacks","act/anim/Russell_102.act"
"3 punch combo + uppercut", "/Global/P_Striker_A/Offense/Short/Strikes/LightAttacks/JAB","act/anim/P_Striker_A.act"
"punch + punch + uppercut", "/Global/P_Striker_A/Offense/Short/Strikes/LightAttacks/JAB/Cross","act/anim/P_Striker_A.act"
"punch + uppercut", "/Global/P_Striker_A/Offense/Short/Strikes/LightAttacks/LeftHook","act/anim/P_Striker_A.act"
"cross punch", "/Global/P_Striker_A/Offense/Short/Strikes/LightAttacks/LeftHook/FinishingCross","act/anim/P_Striker_A.act"
"uppercut", "/Global/P_Striker_A/Offense/Short/Strikes/HeavyAttacks/Uppercut","act/anim/P_Striker_A.act"
"heavy shoulder + punch", "/Global/P_Striker_A/Offense/Medium","act/anim/P_Striker_A.act"
"hopback", "/Global/P_Striker_A/Defense/Evade/EvadeBack","act/anim/P_Striker_A.act"
"evade counter", "/Global/P_Striker_A/Defense/Evade/EvadeCounter/LightAttacks/EvadeBackPunch","act/anim/P_Striker_A.act"
"punch + 2 heavy side punch", "/Global/P_Striker_B/Offense/Short/Strikes/LightAttacks/LeftJab/Hook","act/anim/P_Striker_B.act"
"heavy side punch", "/Global/P_Striker_B/Offense/Short/Strikes/HeavyAttacks/Hook2","act/anim/P_Striker_B.act"
"unblockable charge punch", "/Global/P_Striker_B/Offense/Short/Strikes/Unblockable/HeavyPunchCharge","act/anim/P_Striker_B.act"
"P_Striker Hit Combo", "/Global/P_Striker_B/Offense/Short/Grapples/HeavyAttacks/Catch_Throw","act/anim/P_Striker_B.act"
"punch + 2 heavy side punch", "/Global/P_Striker_B/Offense/Short","act/anim/P_Striker_B.act"
"crouch evade", "/Global/P_Striker_B/Defense/Evade/EvadeCounter","act/anim/P_Striker_B.act"
"2 low punch", "/Global/P_Grappler_A/Offense/Short/Strikes/LightAttacks/LeftJabHead/LeftJabBody","act/anim/P_Grappler_A.act"
"2 heavy punch", "/Global/P_Grappler_A/Offense/Short/Strikes/HeavyAttacks/RightCross/LeftDown","act/anim/P_Grappler_A.act"
"unblockable charge punch", "/Global/P_Grappler_A/Offense/Short/Strikes/Unblockable/HeavyPunchCharge","act/anim/P_Grappler_A.act"
"kick + taunt", "/Global/P_Grappler_A/Offense/Medium/Strikes/Kick/TauntKick","act/anim/P_Grappler_A.act"
"taunt", "/Global/P_Grappler_A/Offense/Medium/Taunts/Taunt_1", "act/anim/P_Grappler_A.act"
"2 low punch charge punch", "/Global/P_Grappler_A/Offense/Short","act/anim/P_Grappler_A.act"
"jump back evade", "/Global/P_Grappler_A/Offense/NonCombatActions/Hopback","act/anim/P_Grappler_A.act"
"crouch evade", "/Global/P_Grappler_A/Defense/Evade/EvadeBack/Evade","act/anim/P_Grappler_A.act"
"2 hit combo", "/Global/P_Bif/Offense/Short/Strikes/LightAttacks/JAB/Cross","act/anim/P_Bif.act"
"charge punch left", "/Global/P_Bif/Offense/Short/HeavyAttacks/LeftHook","act/anim/P_Bif.act"
"charge punch right", "/Global/P_Bif/Offense/Short/HeavyAttacks/RightHook","act/anim/P_Bif.act"
"J_Grappler_A first punch", "/Global/P_Bif/Offense/Medium/HeavyAttacks/GutPunch","act/anim/P_Bif.act"
"straight finisher punch", "/Global/P_Bif/Offense/Medium/HeavyAttacks/StraightPunch","act/anim/P_Bif.act"
"Derby charge punch leftright", "/Global/P_Bif/Offense/Special/HeavyAttacks","act/anim/BOSS_Darby.act"
"duck evade + counter", "/Global/P_Bif/Defense/Evade/EvadeDuck/HeavyAttacks/EvadeDuckPunch","act/anim/P_Bif.act"
"left evade + counter", "/Global/P_Bif/Defense/Evade/EvadeLeft/HeavyAttacks/EvadeRightPunch","act/anim/P_Bif.act"
"right evade + counter", "/Global/P_Bif/Defense/Evade/EvadeRight/HeavyAttacks/EvadeLeftPunch","act/anim/P_Bif.act"
"2 hit combo/charge punch", "/Global/P_Bif/Offense/Short","act/anim/P_Bif.act"
"straight finisher punch", "/Global/P_Bif/Offense/Medium","act/anim/P_Bif.act"
"P_Striker_B + evade", "/Global/BOSS_Darby/Offense/Short/Strikes/LightAttacks/LeftJab/Hook","act/anim/BOSS_Darby.act"
"P_Striker_B final + evade", "/Global/BOSS_Darby/Offense/Short/Strikes/HeavyAttacks/Hook2","act/anim/BOSS_Darby.act"
"P_Striker_A first 2 hits", "/Global/BOSS_Darby/Offense/Medium/Medium/HeavyAttacks/JAB/Cross","act/anim/BOSS_Darby.act"
"P_Striker_A last 2 hits", "/Global/BOSS_Darby/Offense/Short/Strikes/LightAttacks/LeftHook/FinishingCross","act/anim/BOSS_Darby.act"
"unblockable charge punch", "/Global/BOSS_Darby/Offense/Short/Strikes/Unblockable/HeavyPunchCharge","act/anim/BOSS_Darby.act"
"5 hit combo + heavy punch", "/Global/BOSS_Darby/Offense/Short/Grapples/HeavyAttacks/Catch_Throw","act/anim/BOSS_Darby.act"
"duck evade + counter", "/Global/BOSS_Darby/Defense/Evade/EvadeDuck/HeavyAttacks/EvadeDuckPunch","act/anim/BOSS_Darby.act"
"left evade + counter", "/Global/BOSS_Darby/Defense/Evade/EvadeLeft/HeavyAttacks/EvadeRightPunch","act/anim/BOSS_Darby.act"
"right evade + counter", "/Global/BOSS_Darby/Defense/Evade/EvadeRight/HeavyAttacks/EvadeLeftPunch","act/anim/BOSS_Darby.act"
"darby offense", "/Global/BOSS_Darby/Offense","act/anim/BOSS_Darby.act"
"3 evades + counter", "/Global/BOSS_Darby/Defense","act/anim/BOSS_Darby.act"
"2_B.lua (chase uppercut)", "/Global/BOSS_Darby/Offense/Short","act/anim/BOSS_Darby.act"
"bottle throw", "/Global/BOSS_Darby/Special/Throw","act/anim/BOSS_Darby.act"
"chase uppercut", "/Global/BOSS_Darby/Offense/Special/Dash/Dash/Uppercut/ShortDarby","act/anim/BOSS_Darby.act"
"chase uppercut fall reaction", "/Global/2_B/PlayerOnGround/Belly_Up","act/anim/2_B.act"
"3 punch + taunt", "/Global/G_Striker_A/Offense/Short/Strikes/LightAttacks/RightHook/LeftHook/RightCross","act/anim/G_Striker_A.act"
"knee", "/Global/G_Striker_A/Offense/Short/Strikes/HeavyAttacks/HeavyKnee","act/anim/G_Striker_A.act"
"roundhouse", "/Global/G_Striker_A/Offense/Short/Strikes/HeavyAttacks/HeavyKick","act/anim/G_Striker_A.act"
"3 in 1 ^", "/Global/G_Striker_A/Offense/Short","act/anim/G_Striker_A.act"
"3 punch taunt", "/Global/G_Striker_A/Offense/Taunts/Taunt_A","act/anim/G_Striker_A.act"
"hop kick taunt", "/Global/G_Striker_A/Offense/Taunts/Taunt_B","act/anim/G_Striker_A.act"
"groundpunch", "/Global/G_Striker_A/Offense/GroundAttack/GroundPunch","Act/Anim/G_Striker_A.act"
"grabknees", "/Global/G_Striker_A/Offense/Short/Strikes/HeavyKick/HeavyKick/GrabKnees","act/anim/G_Striker_A.act"
"3 punch + kick", "/Global/G_Melee_A/Offense/Short/Strikes/LightAttacks/RightHook/LeftHook/RightCross","act/anim/G_Melee_A.act"
"inverted roundhouse", "/Global/G_Melee_A/Offense/Medium/Strikes/HeavyAttacks/HeavyKick","act/anim/G_Melee_A.act"
"ground punch", "/Global/G_Melee_A/Offense/GroundAttack/GroundPunch","act/anim/G_Melee_A.act"
"knee grab", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/GrappleStrikes/HitC/Charge","Globals/G_Melee_A.act"
"dash punch taunt", "/Global/G_Melee_A/Offense/Taunts/Taunt_B","act/anim/G_Melee_A.act"
"3 punch/kick", "/Global/G_Melee_A/Offense/Short","act/anim/G_Melee_A.act"
"G_Striker_A medium offense", "/Global/G_Melee_A/Offense/Medium","act/anim/G_Melee_A.act"
"2 heavy punch", "/Global/G_Grappler_A/Offense/Short/Strikes/HeavyAttacks/RightHook/Uppercut","act/anim/G_Grappler_A.act"
"axe kick", "/Global/G_Grappler_A/Offense/Short/Strikes/HeavyAttacks/BootKick","act/anim/G_Grappler_A.act"
"2 heavy punch/axe kick", "/Global/G_Grappler_A/Offense/Short/Strikes/LightAttacks","act/anim/G_Grappler_A.act"
"bearhug", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/BearHug","Globals/G_Grappler_A.act"
"punch + knee", "/Global/G_Ranged_A/Offense/Short/Strikes/LightAttacks/RightHook/HeavyKnee","act/anim/G_Ranged_A.act"
"knee", "/Global/G_Ranged_A/Offense/Medium/Strikes/HeavyAttacks/HeavyKnee","act/anim/G_Ranged_A.act"
"all attacks", "/Global/Norton/Offense","act/anim/3_05_Norton.act"
"grabknees", "/Global/G_Johnny/Offense/Short/Strikes/HeavyKick/HeavyKick/Grabknees","act/anim/G_Johnny.act"
"haymaker can't get up", "/Global/G_Johnny/Cinematic/ThroatGrab","act/anim/G_Johnny.act"
"haymaker", "/Global/G_Johnny/Offense/Special/SpecialActions/Grapples/Dash/ThroatGrab","act/anim/G_Johnny.act"
"random punches", "/Global/N_Striker_B/Offense/Short/Strikes/HeavyAttacks/Flail","act/anim/N_Striker_B.act"
"random punches?", "/Global/N_Ranged_A/Defense/Flail","act/anim/N_Ranged_A.act"
"Node", "/Global/N_Earnest/Offense/FireSpudGun","act/anim/N_Earnest.act"
"Node", "/Global/N_Earnest/Offense/ThrowBombs","act/anim/N_Earnest.act"
"punch elbow punch", "/Global/J_Striker_A/Offense/Short/Strikes/LightAttacks/JAB/Elbow/HeavyAttacks/Uppercut","act/anim/J_Striker_A.act"
"football tackle", "/Global/J_Striker_A/Offense/Medium/Grapples/GrapplesAtempt/Takedown","act/anim/J_Striker_A.act"
"2 punch", "/Global/J_Melee_A/Offense/Short/Strikes/LightAttacks/RightHand/LeftHand","act/anim/J_Melee_A.act"
"charge punch", "/Global/J_Melee_A/Offense/Medium/Strikes/HeavyAttacks/HeavyRight","act/anim/J_Melee_A.act"
"shoulder barge", "/Global/J_Melee_A/Offense/Medium/Strikes/Unblockable","act/anim/J_Melee_A.act"
"2 punch + charge punch combo", "/Global/J_Melee_A/Offense/Short","act/anim/J_Melee_A.act"
"charge punch/shoulder barge", "/Global/J_Melee_A/Offense/Medium","act/anim/J_Melee_A.act"
"2 heavy punch", "/Global/J_Grappler_A/Offense/Short/Strikes/HeavyAttacks/RightPunch/Axehandle","act/anim/J_Grappler_A.act"
"backbreaker", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/BackBreaker","Globals/J_Grappler_A.act"
"bodyslam", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/BodySlam","Globals/J_Grappler_A.act"
"Ted duck evade", "/Global/J_Ted/Default_KEY/ExecuteNodes/BlockProjectiles","act/anim/J_Ted.act"
"punch elbow punch", "/Global/J_Ted/Offense/Short/Strikes/LightAttacks/JAB/Elbow/HeavyAttacks/Uppercut","act/anim/J_Ted.act"
"Football tackle (bug)", "/Global/J_Ted/Offense/Medium/Grapples/GrapplesAtempt","act/anim/J_Ted.act"
"run + grab", "/Global/J_Damon/Offense/SpecialStart/StartRun","act/anim/J_Damon.act"
"grab", "/Global/J_Damon/Offense/Medium/Grapples/GrapplesAttempt/TakeDown","act/anim/J_Damon.act"
"B_Striker_A combo 3 hit", "/Global/J_Mascot/Offense/Medium/Strikes/LightAttacks/WindMill_R/WindMill_L/HeavyAttacks/SwingPunch_R","act/anim/J_Mascot.act"
"running headbutt", "/Global/J_Mascot/Offense/Special/Mascot/Mascot/SpecialChoose/Headbutt/Invincible/Headbutt","act/anim/J_Mascot.act"
"Dancing moves", "/Global/J_Mascot/Offense/Dance/Dancing/Dance01","act/anim/J_Mascot.act"
"Dancing moves", "/Global/J_Mascot/Offense/Dance/Dancing/Dance02","act/anim/J_Mascot.act"
"Dancing moves", "/Global/J_Mascot/Offense/Dance/Dancing/Dance03","act/anim/J_Mascot.act"
"Dancing moves", "/Global/J_Mascot/Offense/Dance/Dancing/Dance04","act/anim/J_Mascot.act"
"ground headbutt", "/Global/Actions/Grapples/Mount/GrappleMount/Headbutt","Globals/DO_Grappler_A.act"
"punch knee double axe handl", "/Global/DO_Edgar/Offense/Short/LightAttacks/Punch1/Punch2/HeavyAttacks/Punch3","Act/DO_Edgar.act"
"B_Striker_A combo", "/Global/Crazy_Basic/Offense/Short/Strikes/LightAttacks/WindMill_R/WindMill_L/HeavyAttacks/SwingPunch_R","act/anim/Crazy_Basic.act"
"escape takedown", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/Punishment_Hold/Give","act/anim/Authority.act"
"instant takedown", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/Tonfa_Impale/TonfaImpale","Globals/Authority.act"
"air hold grab", "/Global/Ambient/Scripted/Wall_Hold/GrappleAttempt/GrappleSuccess/Hold_Idle/Harassing","Globals/Authority.act"
"ear grab", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/EarGrab/GIVE","act/anim/Authority.act"
"civilian takedown", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/Adult_Takedown/Give","act/anim/CV_Male_A.act"
"hopback", "/Global/P_Striker_A/Defense/Evade/EvadeBack","act/anim/P_Striker_A.act"
"evade counter", "/Global/P_Striker_A/Defense/Evade/EvadeCounter/LightAttacks/EvadeBackPunch","act/anim/P_Striker_A.act"
"Node", "/Global/G_Johnny/Offense/Short/Strikes/LightAttacks/Punch_1/Punch_2/Punch_3/ShortJohnny","act/anim/G_Johnny.act"
"Node", "/Global/G_Striker_A/Offense/GroundAttack/GroundPunch","Act/Anim/G_Striker_A.act"
"Node", "/Global/DO_Edgar/Offense/Short/LightAttacks/Punch1/Punch2/HeavyAttacks/Punch3","Act/DO_Edgar.act"
"Node", "/Global/DO_Edgar/Offense/Short/LightAttacks/Punch1/Punch2","Act/DO_Edgar.act"
"Girl Nut Kick AnimationSound", "/Global/Actions/Grapples/GrappleReversals/StandingReversals/GirlNutKick","Act/Anim/GS_Female_A.act"
"Slap+Shoulder Hit Combo", "/Global/N_Striker_A/Offense/Short/Strikes/HeavyAttacks", "Act/Anim/N_Striker_A.act"
"Dropouts Unblockable Punch", "/Global/DO_Striker_A/Offense/Medium/HeavyAttacks","Act/Anim/DO_Striker_A.act"
"Node", "/Global/P_Striker_B/Offense/Short/Strikes/HeavyAttacks/Hook2","Act/Anim/P_Striker_B.act"
"Node", "/Global/BOSS_Darby/Offense/Short/Grapples/HeavyAttacks/Catch_Throw/Finisher","Act/Anim/BOSS_Darby.act"
"Node", "/Global/BOSS_Russell/Offense/GroundAttack/GroundStomp1","act/anim/BOSS_Russell.act"
"Node", "/Global/Ambient/Scripted/Wall_Hold","Act/Anim/Ambient.act"
"Node", "/Global/Ambient/Scripted/Wall_Hold/GrappleAttempt","Act/Anim/Ambient.act"
"Node", "/Global/Ambient/Scripted/Wall_Hold/GrappleAttempt/GrappleSuccess","Act/Anim/Ambient.act"
"Node", "/Global/Ambient/Scripted/Wall_Hold/GrappleAttempt/GrappleSuccess/Hold_Idle","Act/Anim/Ambient.act"
"Node", "/Global/Ambient/Scripted/Wall_Hold/GrappleAttempt/GrappleSuccess/Hold_Idle/Harassed","Act/Anim/Ambient.act"
"Node", "/Global/Ambient/Scripted/Wall_Hold/GrappleAttempt/GrappleSuccess/Hold_Idle/Harassing","Act/Anim/Ambient.act"
"Node", "/Global/Actions/Grapples/Front/Grapples/GrappleMoves/Punishment_Hold/Give","Act/Globals.act"
"Node", "/Global/BOSS_Darby/Offense/Short/Strikes/LightAttacks/LeftJab","Act/Anim/BOSS_Darby.act"
"Node", "/Global/BOSS_Darby/Offense/Short/Strikes/LightAttacks/LeftHook","Act/Anim/BOSS_Darby.act"
"Node", "/Global/BOSS_Darby/Offense/Short/Grapples/HeavyAttacks/Catch_Throw","Act/Anim/BOSS_Darby.act"
"Node", "/Global/BOSS_Darby/Offense/Short/Strikes/HeavyAttacks/Hook2","Act/Anim/BOSS_Darby.act"
"Node", "/Global/BOSS_Darby/Offense/Short/Strikes/HeavyAttacks/Unblockable/HeavyPunchCharge/SuperUppercut/StraightPunch/Actions/Lid_Blocks/BlockHits","Act/Anim/BOSS_Darby.act"
"Node", "/Global/BOSS_Darby/Offense/Short/Strikes/Unblockable/HeavyPunchCharge","Act/Anim/BOSS_Darby.act"
"Node", "/Global/BOSS_Darby/Offense/NonCombatActions/Hopback","Act/Anim/BOSS_Darby.act"
"Node", "/Global/BOSS_Darby/Defense/Evade/EvadeDuck","Act/Anim/BOSS_Darby.act"
"Node", "/Global/BOSS_Darby/Offense/Short/Strikes/LightAttacks/LeftJab/Hook","Act/Anim/BOSS_Darby.act"

Scripts.img: Not all of them are 100% guaranteed to work, but these are just what show up in the Scripts.img. Some do not have the ACT file specified on the end of it, but you can probably guess what it is supposed to be from the nodes around it. Note that not all of these are ACTION nodes. Some may be task nodes, or conversations. Ones with /Global/AI/ are usually the task nodes, most others are action nodes.
List can be found here. Too big to post in this topic.

20
Mod Releases / Fight Club 2
« on: December 24, 2014, 01:34:12 PM »
Fight Mod 2
Download

Mr. Burton has decided that dodgeball and wrestling didn't teach students to defend themselves enough. So, he started an after school fight club to help students defend themselves, by beating the shit out of each other and also selling meth and offering open heart surgery to the students to aid them in the fight.

21
Mod Releases / The Cure: Open Source Mission
« on: November 27, 2014, 05:51:29 PM »
There aren't many mission mods for Bully as of now, and I think that needs to change! Mission mods can bring a lot of fun to the game, and a lot of playing time. I'm releasing this mod open source for learning, and to hopefully inspire people to make their own missions when they see how easy it really can be.
If you want to download the pre compiled, Scripts.img version of the mod, here is a link. MediaFire Download

and of course, here is the source as well:

Code: [Select]
local DialougeSpeed = 125
local carModel = 297
local carColor = 25
local endThreads = false

function MissionSetup()
  AreaTransitionXYZ(0,269,-116,6)
  PlayerSetHealth(PedGetMaxHealth(gPlayer))
  PedSetUniqueModelStatus(3,-1)
  PedSetUniqueModelStatus(4,-1)
  PedSetUniqueModelStatus(10,-1)
  PedSetUniqueModelStatus(57,-1)
  PedSetUniqueModelStatus(61,-1)
  PedSetUniqueModelStatus(130,-1)
  PedSetUniqueModelStatus(134,-1)
  LoadAllAnim()
end

function MissionCleanup()
  TextPrintString('',1,1)
  TextPrintString('',1,2)
  PlayerSetControl(1)
  CameraReturnToPlayer()
  CameraSetWidescreen(false)
  EffectSetGymnFireOn(false)
  SoundStopStream()
  DisablePunishmentSystem(false)
  PedSetUniqueModelStatus(3,1)
  PedSetUniqueModelStatus(4,1)
  PedSetUniqueModelStatus(10,1)
  endThreads = true
end

function main()
  CreateThread("F_SpeedSelect")
  --CreateThread("F_SuperSpudGun")
  CreateThread("F_StopAdultBust")
  F_TalkToPete1()
end

function F_SpeedSelect()
  while not endThreads do
    if IsButtonBeingPressed(0,1) then
      DialougeSpeed = DialougeSpeed - 10
  if DialougeSpeed < 0 then
    DialougeSpeed = 0
  end
  TextPrintString("Dialouge Speed: "..DialougeSpeed.."%\n(Lower = Faster | Higher = Slower)",2,2)
    elseif IsButtonBeingPressed(1,1) then
      DialougeSpeed = DialougeSpeed + 10
  if DialougeSpeed > 300 then
    DialougeSpeed = 300
  end
  TextPrintString("Dialouge Speed: "..DialougeSpeed.."%\n(Lower = Faster | Higher = Slower)",2,2)
    end
    Wait(0)
  end
end

function F_SuperSpudGun()
  PedSetWeapon(gPlayer,396,8)
  while not endThreads do
    if PedGetWeapon(gPlayer) == 396 then
  GameSetPedStat(gPlayer,31,300)
      if IsButtonBeingReleased(12,0) then
    Wait(187)
    PedSetActionNode(gPlayer,"/Global/Player","Act/Player.act")
    PedSetWeapon(gPlayer,-1)
    Wait(0)
    PedSetWeapon(gPlayer,396,8)
  end
else
   GameSetPedStat(gPlayer,31,100)
end
Wait(0)
  end
end

function F_StopAdultBust()
  local target = ped
  while not endThreads do
    ped = PedGetGrappleTargetPed(gPlayer)
if PedIsValid(ped) and PedIsPlaying(ped,"/Global/Actions/Grapples/Front/Grapples/GrappleMoves/Adult_Takedown/Give","Act/Globals.act") then
  PedSetActionNode(gPlayer,"/Global/Player","Act/Player.act")
  PedSetActionNode(ped,"/Global/Player","Act/Player.act")
end
    Wait(0)
  end
end

function PedsPrepareConversation(ped1,ped2,distance,walkSpeed)
  PlayerSetPunishmentPoints(0)
  if PedGetWeapon(gPlayer) == 437 then
    PedSetWeapon(gPlayer,-1)
  end
  if PedIsInAnyVehicle(gPlayer) then
    PedWarpOutOfCar(gPlayer)
  end
  PedStop(ped2)
  local x,y,z = PedGetPosXYZ(ped2)
  PedMoveToXYZ(ped1,walkSpeed,x,y,z)
  local r1 = x + distance
  local r2 = y + distance
  local r3 = x - distance
  local r4 = y - distance
  x,y,z = PedGetPosXYZ(ped1)
  PedFaceXYZ(ped2,x,y,z)
  repeat
Wait(0)
  until PedInRectangle(ped1,r1,r2,r3,r4)
  PedStop(ped1)
  x,y,z = PedGetPosXYZ(ped2)
  PedFaceXYZ(ped1,x,y,z)
  x,y,z = PedGetPosXYZ(ped1)
  PedFaceXYZ(ped2,x,y,z)
end

function AllPedsDead(peds)
  for c = 1,table.getn(peds) do
    if PedIsValid(peds[c]) and not PedIsDead(peds[c]) then
  break
    elseif c == table.getn(peds) then
  return true
end
Wait(0)
  end
  return false
end

function F_TalkToPete1()
  pete = PedCreateXYZ(134,269,-109,7)
  PedSetStationary(pete,true)
  PedSetInvulnerable(pete,true)
  PlayerSetControl(0)
  CameraSetXYZ(272,-107,7)
  CameraLookAtXYZ(270,-110,7.5)
  CameraSetWidescreen(true)
  PedsPrepareConversation(gPlayer,pete,1,0)
  TextPrintString("Pete: Yo Jimmy, mah dawg. Algie needs some shit from you dawg.",10,2)
  Wait(4250 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Okay. Where is he then?",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Pete: Umm, bro I gotta go.",10,2)
  Wait(3000 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Can't you tell me where he is first?",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Pete: DUDE OMFG GTG",10,2)
  Wait(1250 * (DialougeSpeed/100))
  TextPrintString('',10,2)
  GameSetPedStat(pete,20,222)
  PedSetInfiniteSprint(pete,true)
  PedSetStationary(pete,false)
  PedMoveToXYZ(pete,2,383,-56,7)
  PlayerSetControl(1)
  CameraReturnToPlayer()
  CameraSetWidescreen(false)
  F_CatchPete()
end

function F_CatchPete()
  gary = PedCreateXYZ(130,306,-77,6)
  PedSetStationary(gary,true)
  PedSetInvulnerable(gary,true)
  TextPrintString("Catch Petey!",4,1)
  local x,y = 383,-56
  local r1 = x + 1
  local r2 = y + 1
  local r3 = x - 1
  local r4 = y - 1
  repeat
Wait(0)
  until PedInRectangle(pete,r1,r2,r3,r4)
  PedDelete(pete)
  TextPrintString("Jimmy: Shit! He got away...",2,2)
  Wait(2250 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Was that Gary I saw by the gates?",3,2)
  Wait(3000 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  F_TalkToGary1()
end

function F_TalkToGary1()
  TextPrintString("Go meet Gary",4,1)
  local blip = BlipAddXYZ(306,-77,6)
  local x,y = 306,-77
  local r1 = x + 3.5
  local r2 = y + 3.5
  local r3 = x - 3.5
  local r4 = y - 3.5
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  BlipRemove(blip)
  PlayerSetControl(0)
  CameraSetXYZ(309,-74,7.5)
  CameraLookAtXYZ(306,-77,6)
  CameraSetWidescreen(true)
  PedsPrepareConversation(gPlayer,gary,1,0)
  TextPrintString("Gary: So, word on the street is you wanna find Algie?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Not really. He wanted me though I believe.",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Gary: Well fuck you faggot, you want him.",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Umm... okay fine. Why, do you know where he is?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Gary: No. Only you, the chosen one, knows where he is.",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: But... I don't.",10,2)
  Wait(2250 * (DialougeSpeed/100))
  TextPrintString("Gary: Oh but you do, you just have to unlock the knowledge by going on a spiritual journey.",10,2)
  Wait(3500 * (DialougeSpeed/100))
  TextPrintString("Jimmy: How can I do that?",10,2)
  Wait(2250 * (DialougeSpeed/100))
  orderly = PedCreateXYZ(53,310,-72,7)
  PedFaceXYZ(orderly,306,-77,6)
  PedSetInvulnerable(orderly,true)
  PedSetStationary(orderly,true)
  --PedSetActionNode(orderly,AUTHORITY POINT ANIM)
  Wait(250)
  TextPrintString("Orderly: There's the run-away! You're coming with me.",10,2)
  CameraSetXYZ(305,-75.5,7)
  CameraLookAtXYZ(310,-72,7)
  Wait(3000 * (DialougeSpeed/100))
  TextPrintString('',10,2)
  PedSetActionTree(gary,"/Global/N_Ranged_A","Act/Anim/N_Ranged_A.act")
  PedSetInfiniteSprint(gary,true)
  PedSetInfiniteSprint(orderly,true)
  GameSetPedStat(gary,20,225)
  GameSetPedStat(orderly,20,220)
  PedSetStationary(gary,false)
  PedSetStationary(orderly,false)
  PedMoveToXYZ(gary,2,383,-56,7)
  PedMoveToXYZ(orderly,2,383,-56,7)
  PlayerSetControl(1)
  CameraReturnToPlayer()
  CameraSetWidescreen(false)
  CreateThread("F_DeleteGary")
  Wait(500)
  F_TalkToGalloway1()
end

function F_DeleteGary()
  local x,y = 383,-56
  local r1 = x + 1
  local r2 = y + 1
  local r3 = x - 1
  local r4 = y - 1
  repeat
    Wait(0)
  until PedInRectangle(gary,r1,r2,r3,r4)
  PedDelete(gary)
  repeat
    Wait(0)
  until PedInRectangle(orderly,r1,r2,r3,r4)
  PedDelete(orderly)
end

function F_TalkToGalloway1()
  TextPrintString("Go find a teacher to learn more about spiritual journeys",5,1)
  galloway = PedCreateXYZ(57,-560,319,-1)
  PedSetStationary(galloway,true)
  PedSetInvulnerable(galloway,true)
  PedFaceXYZ(galloway,-564,317,0)
  local blip = BlipAddXYZ(-653,-291,0)
  local x,y = -653,-291
  local r1 = x + 2
  local r2 = y + 2
  local r3 = x - 2
  local r4 = y - 2
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  PlayerSetPunishmentPoints(0)
  AreaTransitionXYZ(15,-564,317,-1)
  BlipRemove(blip)
  PlayerSetControl(0)
  CameraSetXYZ(-558,321,0)
  CameraLookAtXYZ(-561,318,-1)
  CameraSetWidescreen(true)
  PedsPrepareConversation(gPlayer,galloway,1,0)
  TextPrintString("Galloway: Jimmy! What's up with you, my number one nigga?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: I need help going on a spiritual journey, can you help me?",10,2)
  Wait(3000 * (DialougeSpeed/100))
  TextPrintString("Galloway: Oh but of course! Here, try some of this stuff, it'll get your journey started.",10,2)
  Wait(3250 * (DialougeSpeed/100))
  TextPrintString('',10,2)
  Wait(100)
  PedSetWeapon(gPlayer,327,1)
  Wait(100)
  ExecuteActionNode(gPlayer,"/Global/2_S05/Anims/Drink","Act/Conv/2_S05.act")
  Wait(6000)
  PedSetActionNode(gPlayer,"/Global/Player","Act/Player.act")
  PlayerSetControl(1)
  CameraReturnToPlayer()
  CameraSetWidescreen(false)
  EffectSetGymnFireOn(true)
  Wait(4000)
  TextPrintString("Jimmy: Shit... I'm not feeling so good... I hope I don't blackout.",10,2)
  Wait(3650 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  F_BunnyFight()
end

function F_BunnyFight()
  AreaTransitionXYZ(8,-772,-134,6)
  local spawns = {{-772,-129},{-766,-136},{-767,-139},{-771,-141},{-776,-139},{-776,-130}}
  local styles = {"P_Bif","G_Johnny","BOSS_Darby","Nemesis","BOSS_Russell"}
  local enemies = {}
  SoundPlayStream("MS_WildstyleHigh.rsm",0.5)
  for c = 1,table.getn(spawns) do
    local enemy = PedCreateXYZ(165,spawns[c][1],spawns[c][2],6)
PedSetWeapon(enemy,-1)
PedSetHealth(enemy,290)
PedSetMaxHealth(enemy,290)
GameSetPedStat(enemy,6,0)
GameSetPedStat(enemy,7,0)
GameSetPedStat(enemy,8,100000)
GameSetPedStat(enemy,12,86)
GameSetPedStat(enemy,13,94)
GameSetPedStat(enemy,14,100)
GameSetPedStat(enemy,39,95)
GameSetPedStat(enemy,63,0)
PedSetInfiniteSprint(enemy,true)
PedAttackPlayer(enemy,3)
PedSetPedToTypeAttitude(enemy,13,0)
local style = styles[math.random(1,table.getn(styles))]
PedSetActionTree(enemy,"/Global/"..style,"Act/Anim/"..style..".act")
AddBlipForChar(enemy,0,26,4)
table.insert(enemies,enemy)
Wait(0)
  end
  TextPrintString("Defeat the fluffy pink bunnies",4,1)
  repeat
    Wait(0)
  until AllPedsDead(enemies)
  Wait(750)
  for c = 1,table.getn(enemies) do
    if PedIsValid(enemies[c]) then
  PedDelete(enemies[c])
end
Wait(0)
  end
  PlayerSetHealth(PedGetMaxHealth(gPlayer))
  PlayerSetPunishmentPoints(0)
  SoundStopStream()
  EffectSetGymnFireOn(false)
  F_TalkToGalloway2()
end

function F_TalkToGalloway2()
  PlayerSetControl(0)
  PedSetPosXYZ(gPlayer,-772,-134,6)
  Wait(0)
  CameraSetXYZ(-775,-130,7)
  CameraLookAtXYZ(-772,-134,6)
  CameraSetWidescreen(true)
  PedSetPosXYZ(galloway,-771,-126,8)
  PedSetStationary(galloway,false)
  PedsPrepareConversation(galloway,gPlayer,1,0)
  TextPrintString("Galloway: James, what the hell are you doing?",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Jimmy: I was defeating the army of bunnies!",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Galloway: I watched you the whole time, you were just hallucinating. There are no bunnies.",10,2)
  Wait(3500 * (DialougeSpeed/100))
  TextPrintString("Galloway: Anyways, did you have your vision?",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Jimmy: No... I didn't have the vision yet.",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Galloway: Shit... guess we'll just have to keep trying.",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  Wait(100)
  PedSetWeapon(gPlayer,327,1)
  Wait(100)
  ExecuteActionNode(gPlayer,"/Global/2_S05/Anims/Drink","Act/Conv/2_S05.act")
  Wait(6000)
  PedSetActionNode(gPlayer,"/Global/Player","Act/Player.act")
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  PlayerSetControl(1)
  F_AlgieDream()
end

function F_AlgieDream()
  AreaTransitionXYZ(37,-746,-535,8)
  algie = PedCreateXYZ(4,-748,-541,10)
  PedSetInvulnerable(algie,true)
  PedFaceXYZ(gPlayer,-748,-541,10)
  PedFaceXYZ(algie,-746,-535,8)
  EffectSetGymnFireOn(true)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(-742,-532,9)
  CameraLookAtXYZ(-748,-541,11)
  local defaultFOV = CameraGetFOV()
  TextPrintString("Algie: Jimmy.....",10,2)
  Wait(1750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Um... yes?",10,2)
  Wait(1750 * (DialougeSpeed/100))
  TextPrintString("Algie: Jimmy.....",10,2)
  Wait(1750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: What?",10,2)
  Wait(1750 * (DialougeSpeed/100))
  TextPrintString("Algie: JIMMY!!!",10,2)
  CameraSetFOV(8)
  Wait(1750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: AHHHHH!!!",10,2)
  for fov = 8,defaultFOV,3 do
    CameraSetFOV(fov)
Wait(0)
  end
  CameraSetFOV(defaultFOV)
  Wait(1500 * (DialougeSpeed/100))
  F_TalkToGalloway3()
end

function F_TalkToGalloway3()
  AreaTransitionXYZ(8,-772,-134,6)
  EffectSetGymnFireOn(false)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(-775,-130,7)
  CameraLookAtXYZ(-772,-134,6)
  PedsPrepareConversation(galloway,gPlayer,1,0)
  PedSetStationary(galloway,true)
  TextPrintString("Galloway: Jimmy, wake up!",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Oh shit, what the hell?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Galloway: What did you see?",10,2)
  Wait(2250 * (DialougeSpeed/100))
  TextPrintString("Jimmy: I seen... OH SHIT! I had my vision! I know where Algie is! Thanks Galloway.",10,2)
  Wait(3250 * (DialougeSpeed/100))
  TextPrintString("Galloway: Where is he?",10,2)
  Wait(2000 * (DialougeSpeed/100))
  TextPrintString("Jimmy: The funhouse, but I better hurry before he leaves.",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Galloway: Hmm, you'll need something fast then. Take my truck.",10,2)
  Wait(3000 * (DialougeSpeed/100))
  TextPrintString("Jimmy: But... I've been drinking, and I don't even have a license.",10,2)
  Wait(3250 * (DialougeSpeed/100))
  TextPrintString("Galloway: Never stopped me.",10,2)
  Wait(2000 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  PlayerSetControl(1)
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  F_TalkToAlgie1()
end

function F_TalkToAlgie1()
  car = VehicleCreateXYZ(carModel,197,-11,5.5)
  VehicleSetColor(car,carColor)
  CreateThread("F_DriveCar")
  TextPrintString("Get in Galloway's truck",4,1)
  local blip = BlipAddXYZ(197,-11,7)
  repeat
    Wait(0)
  until PedIsInVehicle(gPlayer,car)
  BlipRemove(blip)
  TextPrintString("Go see Algernon",3.5,1)
  PedSetPosXYZ(algie,129,435,7)
  PedSetStationary(algie,true)
  dog = PedCreateXYZ(219,128,436,7)
  PedRecruitAlly(algie,dog)
  PedSetInvulnerable(dog,true)
  blip = BlipAddXYZ(129,435,7)
  local x,y = 129,435
  local r1 = x + 4
  local r2 = y + 4
  local r3 = x - 4
  local r4 = y - 4
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  BlipRemove(blip)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(132,436,7)
  CameraLookAtXYZ(129,435,7)
  PedsPrepareConversation(gPlayer,algie,1,0)
  TextPrintString("Algie: Jimmy! There you are.",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Jimmy: You needed me?",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Algie: Yes, I need your help. I'll pay you 2 bucks as usual.",10,2)
  Wait(3000 * (DialougeSpeed/100))
  TextPrintString("Jimmy: And of course that means 5, right?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Algie: Yeah sure whatever. Just help me, please?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Okay, what do you need?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Algie: My dog has ebola. Can you cure him?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Okay I'll try.",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  PlayerSetControl(1)
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  F_TalkToBeatrice1()
end

function F_TalkToBeatrice1()
  TextPrintString("Find a cure for ebola",3,1)
  beatrice = PedCreateXYZ(3,247,-14,7)
  PedSetStationary(beatrice,true)
  PedSetInvulnerable(beatrice,true)
  local blip = BlipAddXYZ(247,-14,7)
  local x,y = 247,-14
  local r1 = x + 3.5
  local r2 = y + 3.5
  local r3 = x - 3.5
  local r4 = y - 3.5
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  if PedIsInVehicle(gPlayer,car) then
    PedWarpOutOfCar(gPlayer)
VehicleDelete(car)
car = VehicleCreateXYZ(carModel,244,-32,8)
VehicleSetColor(car,carColor)
  end
  BlipRemove(blip)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(245,-12,7)
  CameraLookAtXYZ(247,-14,7)
  PedsPrepareConversation(gPlayer,beatrice,1,0)
  TextPrintString("Beatrice: Oh hi there.",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Hello, do you know a cure for ebola?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Beatrice: Maybe, but what's in it for me?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  TextPrintString("Hit Beatrice",1,1)
  PlayerSetControl(1)
  PedSetStationary(gPlayer,true)
  PedSetInvulnerable(beatrice,false)
  DisablePunishmentSystem(true)
  repeat
    Wait(0)
  until PedGetWhoHitMeLast(beatrice) == gPlayer or DialougeSpeed < 1
  PedSetStationary(gPlayer,false)
  PedSetInvulnerable(beatrice,true)
  DisablePunishmentSystem(false)
  PlayerSetControl(0)
  TextPrintString("Beatrice: Okay okay!",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Beatrice: I've been working on a cure, but Hatrick took it away in class! But then he got fired before he could give it back...",10,2)
  Wait(3750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Hmm, guess I'll go check out his house.",10,2)
  Wait(2800 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  PlayerSetControl(1)
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  F_GoToHatrick()
end

function F_GoToHatrick()
  TextPrintString("Go to Mr. Hattrick's house",4,1)
  bill = PedCreateXYZ(77,404,520,23)
  PedSetStationary(bill,true)
  local blip = BlipAddXYZ(401,516,23)
  local x,y = 401,516
  local r1 = x + 6.5
  local r2 = y + 6.5
  local r3 = x - 6.5
  local r4 = y - 6.5
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  if PedIsInVehicle(gPlayer,car) then
    PedWarpOutOfCar(gPlayer)
VehicleDelete(car)
car = VehicleCreateXYZ(carModel,394,504,23.5)
VehicleSetColor(car,carColor)
  end
  BlipRemove(blip)
  DisablePunishmentSystem(true)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(406,517,24)
  CameraLookAtXYZ(404,520,24)
  PedsPrepareConversation(gPlayer,bill,1,1)
  TextPrintString("Bill: What are you doing here you little shit?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: I'm here to see Hatrick.",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Bill: This party is for grown ups!",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  TextPrintString("Hit Bill",1,1)
  PlayerSetControl(1)
  PedSetStationary(gPlayer,true)
  repeat
    Wait(0)
  until PedGetWhoHitMeLast(bill) == gPlayer or DialougeSpeed < 1
  PedSetStationary(gPlayer,false)
  PlayerSetControl(0)
  TextPrintString("Bill: FUCK YOU!!! EAT MY DICK YOU LITTLE BITCH!!!",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString('',1,1)
  PlayerSetControl(1)
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  PedSetStationary(bill,false)
  F_HatrickFight1()
end

function F_HatrickFight1()
  TextPrintString("Defeat Bill",3,1)
  PedSetActionTree(bill,"/Global/G_Striker_A","Act/Anim/G_Striker_A.act")
  PedSetWeapon(bill,-1)
  PedSetHealth(bill,365)
  PedSetMaxHealth(bill,365)
  GameSetPedStat(bill,6,0)
  GameSetPedStat(bill,7,0)
  GameSetPedStat(bill,8,100000)
  GameSetPedStat(bill,12,90)
  GameSetPedStat(bill,13,95)
  GameSetPedStat(bill,14,100)
  GameSetPedStat(bill,63,0)
  PedSetInfiniteSprint(bill,true)
  PedSetPedToTypeAttitude(bill,13,0)
  PedAttackPlayer(bill,3)
  AddBlipForChar(bill,0,26,4)
  repeat
    Wait(0)
  until not PedIsValid(bill) or PedIsDead(bill)
  local spawns = {{386,556,76},{380,555,78},{373,549,79},{370,540,80},{375,533,81},{375,541,108},{383,549,144}}
  local styles = {"P_Bif","G_Johnny","BOSS_Darby","Nemesis","J_Melee_A"}
  local enemies = {}
  for c = 1,table.getn(spawns) do
    local enemy = PedCreateXYZ(spawns[c][3],spawns[c][1],spawns[c][2],25)
PedSetWeapon(enemy,-1)
PedSetHealth(enemy,365)
PedSetMaxHealth(enemy,365)
GameSetPedStat(enemy,6,0)
GameSetPedStat(enemy,7,0)
GameSetPedStat(enemy,8,100000)
GameSetPedStat(enemy,12,86)
GameSetPedStat(enemy,13,94)
GameSetPedStat(enemy,14,100)
GameSetPedStat(enemy,63,0)
PedSetInfiniteSprint(enemy,true)
local style = styles[math.random(1,table.getn(styles))]
PedSetActionTree(enemy,"/Global/"..style,"Act/Anim/"..style..".act")
table.insert(enemies,enemy)
Wait(0)
  end
  TextPrintString("Beat up the rest of the partiers",5,1)
  PAnimOpenDoors(401,516,23,3)
  local blip = BlipAddXYZ(379,540,26)
  local x,y = 379,540
  local r1 = x + 1
  local r2 = y + 1
  local r3 = x - 1
  local r4 = y - 1
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  BlipRemove(blip)
  PAnimOpenDoors(379,540,26,5)
  SoundPlayStream("MS_FightingJohnnyVincentFight.rsm",0.5)
  if DialougeSpeed > 0 then
    TextPrintString("Crowd: Get dat lil mother fucker!",4,2)
  end
  for c = 1,table.getn(enemies) do
    PedSetPedToTypeAttitude(enemies[c],13,0)
PedAttackPlayer(enemies[c],3)
AddBlipForChar(enemies[c],0,26,4)
Wait(0)
  end
  repeat
    Wait(0)
  until AllPedsDead(enemies)
  Wait(500)
  F_HatrickFight2()
end

function F_HatrickFight2()
  TextPrintString("Confront Hatrick",3,1)
  hatrick = PedCreateXYZ(61,372,549,26)
  PedSetInvulnerable(hatrick,true)
  PedSetStationary(hatrick,true)
  local blip = BlipAddXYZ(372,549,26)
  local x,y = 372,549
  local r1 = x + 4.5
  local r2 = y + 4.5
  local r3 = x - 4.5
  local r4 = y - 4.5
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  BlipRemove(blip)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(373,546,27.5)
  CameraLookAtXYZ(372,549,26.5)
  PedsPrepareConversation(gPlayer,hatrick,1,0)
  TextPrintString("Hatrick: Good god! My party is ruined! You will pay for this!",10,2)
  Wait(3000 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Bring it on.",10,2)
  Wait(2250 * (DialougeSpeed/100))
  TextPrintString('',10,2)
  PlayerSetControl(1)
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  TextPrintString("Defeat Hatrick",3,1)
  PedSetActionTree(hatrick,"/Global/Russell_102","Act/Anim/Russell_102.act")
  PedSetInvulnerable(hatrick,false)
  PedSetStationary(hatrick,false)
  PedSetWeapon(hatrick,-1)
  PedSetHealth(hatrick,615)
  PedSetMaxHealth(hatrick,615)
  GameSetPedStat(hatrick,6,0)
  GameSetPedStat(hatrick,7,0)
  GameSetPedStat(hatrick,8,100000)
  GameSetPedStat(hatrick,12,86)
  GameSetPedStat(hatrick,13,94)
  GameSetPedStat(hatrick,14,100)
  GameSetPedStat(hatrick,63,0)
  PedSetInfiniteSprint(hatrick,true)
  PlayerSetMinPunishmentPoints(100)
  PedSetPedToTypeAttitude(hatrick,13,0)
  PedAttackPlayer(hatrick,3)
  AddBlipForChar(hatrick,0,26,4)
  repeat
    Wait(0)
  until not PedIsValid(hatrick) or PedIsDead(hatrick)
  PlayerSetMinPunishmentPoints(0)
  Wait(500)
  SoundStopStream()
  DisablePunishmentSystem(false)
  F_TalkToBeatrice2()
end

function F_TalkToBeatrice2()
  TextPrintString("Return Beatrice's notebook",4,1)
  local blip = BlipAddXYZ(247,-14,7)
  local x,y = 247,-14
  local r1 = x + 3.5
  local r2 = y + 3.5
  local r3 = x - 3.5
  local r4 = y - 3.5
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  if PedIsInVehicle(gPlayer,car) then
    PedWarpOutOfCar(gPlayer)
VehicleDelete(car)
car = VehicleCreateXYZ(carModel,244,-32,8)
VehicleSetColor(car,carColor)
  end
  BlipRemove(blip)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(245,-12,7)
  CameraLookAtXYZ(247,-14,7)
  PedsPrepareConversation(gPlayer,beatrice,1,0)
  TextPrintString("Jimmy: Here you go.",10,2)
  Wait(2000 * (DialougeSpeed/100))
  TextPrintString("Beatrice: Okay, now I can make the cure.",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Beatrice: Here you go.",10,2)
  Wait(2000 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Thanks, and do you know where Algie is?",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Beatrice: Yes, he's at the library.",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Beatrice: Oh I'm so happy! I'm going to deliver this cure to all the hospitals in the world and be famous!",10,2)
  Wait(3600 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  PlayerSetControl(1)
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  F_TalkToAlgie2()
end

function F_TalkToAlgie2()
  PedSetPosXYZ(algie,180,-150,8)
  PedSetPosXYZ(dog,179,-149,8)
  if PedGetAllyFollower(algie) ~= dog then
    PedDismissAllAllies(algie)
    PedRecruitAlly(algie,dog)
  end
  TextPrintString("Deliver the cure to Algernon",4,1)
  local blip = BlipAddXYZ(180,-150,8)
  local x,y,z = 180,-150,8
  local r1 = x + 4
  local r2 = y + 4
  local r3 = x - 4
  local r4 = y - 4
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  if PedIsInVehicle(gPlayer,car) then
    PedWarpOutOfCar(gPlayer)
VehicleDelete(car)
car = VehicleCreateXYZ(carModel,172.5,-147,9)
VehicleSetColor(car,carColor)
  end
  BlipRemove(blip)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(183,-147,8)
  CameraLookAtXYZ(180,-150,8.5)
  PedsPrepareConversation(gPlayer,algie,1,0)
  TextPrintString("Jimmy: Here ya go. So, my money?",10,2)
  Wait(2250 * (DialougeSpeed/100))
  TextPrintString("Algie: Thanks Jimmy! Come here Mr. Pickles.",10,2)
  Wait(2500 * (DialougeSpeed/100))
  x,y,z = PedGetPosXYZ(dog)
  PedFaceXYZ(algie,x,y,z)
  x,y,z = PedGetPosXYZ(algie)
  PedFaceXYZ(dog,x,y,z)
  PedSetActionNode(algie,"/Global/1_11X2/Animations/KneelFeed/KneelFeed","Act/Conv/1_11X2.act")
  repeat
    Wait(0)
  until not PedIsPlaying(algie,"/Global/1_11X2/Animations/KneelFeed/KneelFeed","Act/Conv/1_11X2.act")
  PedSetActionNode(dog,"/Global/1_11X2/Animations/DogChew/ChewIn","Act/Conv/1_11X2.act")
  repeat
    Wait(0)
  until not PedIsPlaying(dog,"/Global/1_11X2/Animations/DogChew/ChewIn","Act/Conv/1_11X2.act")
  Wait(500)
  PedSetActionNode(dog,"/Global/4_05/Anims/StealCostumeCut/KnockedOut","Act/Conv/4_05.act")
  x,y,z = PlayerGetPosXYZ()
  PedFaceXYZ(algie,x,y,z)
  TextPrintString("Algie: You... you killed my dog!",10,2)
  Wait(2250 * (DialougeSpeed/100))
  TextPrintString("Algie: DIE YOU FUCKING DONKEY CUNT!!!",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  PedSetActionNode(gPlayer,"/Global/Player","Act/Player.act")
  PedSetActionNode(algie,"/Global/N_Striker_B","Act/N_Striker_B.act")
  PlayerSetControl(1)
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  F_FightAlgie()
end

function F_FightAlgie()
  TextPrintString("Defeat Algernon",3,1)
  PedSetActionTree(algie,"/Global/BOSS_Russell","Act/Anim/BOSS_Russell.act")
  PedSetInvulnerable(algie,false)
  PedSetStationary(algie,false)
  PedSetWeapon(algie,-1)
  PedSetHealth(algie,320)
  PedSetMaxHealth(algie,320)
  GameSetPedStat(algie,6,0)
  GameSetPedStat(algie,7,0)
  GameSetPedStat(algie,8,100000)
  GameSetPedStat(algie,12,86)
  GameSetPedStat(algie,13,94)
  GameSetPedStat(algie,14,100)
  GameSetPedStat(algie,39,95)
  GameSetPedStat(algie,63,0)
  PedSetInfiniteSprint(algie,true)
  PedSetPedToTypeAttitude(algie,13,0)
  PedAttackPlayer(algie,3)
  AddBlipForChar(algie,0,26,4)
  repeat
    Wait(0)
  until not PedIsValid(algie) or PedIsDead(algie)
  if PedIsInVehicle(gPlayer,car) then
    PedWarpOutOfCar(gPlayer)
VehicleDelete(car)
car = VehicleCreateXYZ(carModel,172.5,-147,9)
VehicleSetColor(car,carColor)
  end
  Wait(500)
  F_FightEarnest()
end

function F_FightEarnest()
  earnest = PedCreateXYZ(10,188,-155,9)
  PedFaceXYZ(earnest,188,-152,8)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(189,-150,7.5)
  CameraLookAtXYZ(188,-155,10.5)
  PedDelete(dog)
  TextPrintString("Algie! I'll avenge you!",10,2)
  Wait(2250 * (DialougeSpeed/100))
  TextPrintString("It'll be easy with my new ULTRA SPUD GUN!",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  PlayerSetControl(1)
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  PedSetWeapon(earnest,-1)
  PedSetInfiniteSprint(earnest,true)
  PedSetPedToTypeAttitude(earnest,13,0)
  PedAttackPlayer(earnest,3)
  AddBlipForChar(earnest,0,26,4)
  TextPrintString("Take down Earnest before he can get out his Ultra Spudgun!",5,1)
  Wait(2000)
  PedSetWeapon(earnest,396,8)
  GameSetPedStat(earnest,10,300)
  GameSetPedStat(earnest,11,300)
  GameSetPedStat(earnest,31,300)
  repeat
    Wait(0)
  until not PedIsValid(earnest) or PedIsDead(earnest)
  Wait(500)
  CreateThread("F_SuperSpudGun")
  TextPrintString("Jimmy: Ooh, this new spud gun is pretty nice. I wonder how powerful it is...",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Oh shit! Beatrice is about to send that cure out, and it kills people!",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  F_TalkToBeatrice3()
end

function F_TalkToBeatrice3()
  TextPrintString("Warn Beatrice that the cure kills!",4.5,1)
  local blip = BlipAddXYZ(247,-14,7)
  local x,y = 247,-14
  local r1 = x + 3.5
  local r2 = y + 3.5
  local r3 = x - 3.5
  local r4 = y - 3.5
  repeat
    Wait(0)
  until PedInRectangle(gPlayer,r1,r2,r3,r4)
  BlipRemove(blip)
  PlayerSetControl(0)
  CameraSetWidescreen(true)
  CameraSetXYZ(245,-12,7)
  CameraLookAtXYZ(247,-14,7)
  PedsPrepareConversation(gPlayer,beatrice,1,0)
  TextPrintString("Jimmy: Don't send the cure yet!",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Beatrice: What? Why not?",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Jimmy: It killed Algie's dog!",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Beatrice: Oh I know... that's my plan, I'm going to end ebola once and for all...",10,2)
  Wait(3250 * (DialougeSpeed/100))
  TextPrintString("Jimmy: By killing them?",10,2)
  Wait(2500 * (DialougeSpeed/100))
  TextPrintString("Beatrice: Yes, that is the only way we can stop it from spreading.",10,2)
  Wait(3000 * (DialougeSpeed/100))
  TextPrintString("Jimmy: That's terrible! I have to stop you!",10,2)
  Wait(2750 * (DialougeSpeed/100))
  TextPrintString("Beatrice: Bitch please, I gave myself superhuman strength with a potion I cooked up while you were getting my notebook.",10,2)
  Wait(3250 * (DialougeSpeed/100))
  TextPrintString('',1,2)
  PlayerSetControl(1)
  CameraSetWidescreen(false)
  CameraReturnToPlayer()
  F_FightBeatrice()
end

function F_FightBeatrice()
  TextPrintString("Defeat Beatrice",3,1)
  PedSetActionTree(beatrice,"/Global/P_Bif","Act/Anim/P_Bif.act")
  PedSetInvulnerable(beatrice,false)
  PedSetStationary(beatrice,false)
  PedSetWeapon(beatrice,-1)
  PedSetHealth(beatrice,9500)
  PedSetMaxHealth(beatrice,17500)
  GameSetPedStat(beatrice,6,0)
  GameSetPedStat(beatrice,7,0)
  GameSetPedStat(beatrice,8,100000)
  GameSetPedStat(beatrice,12,95)
  GameSetPedStat(beatrice,13,100)
  GameSetPedStat(beatrice,14,100)
  GameSetPedStat(beatrice,63,0)
  PedSetInfiniteSprint(beatrice,true)
  PedSetPedToTypeAttitude(beatrice,13,0)
  PedAttackPlayer(beatrice,3)
  AddBlipForChar(beatrice,0,26,4)
  repeat
    Wait(0)
  until not PedIsValid(beatrice) or PedIsDead(beatrice)
  Wait(500)
  F_Ending()
end

function F_Ending()
  TextPrintString("Jimmy: I did it! I defeated her!",10,2)
  Wait(2850 * (DialougeSpeed/100))
  TextPrintString("Jimmy: And cured Algie's dog! Or wait no... I killed him",10,2)
  Wait(3350 * (DialougeSpeed/100))
  TextPrintString("Jimmy: And um beat up Algie and Earnest...",10,2)
  Wait(2850 * (DialougeSpeed/100))
  TextPrintString("Jimmy: And I totally crashed Hatrick's party... oh well, he was a dick",10,2)
  Wait(3600 * (DialougeSpeed/100))
  TextPrintString("Jimmy: And well... shit, I guess I shouldn't be so proud after all",10,2)
  Wait(3400 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Oh well, at least I stopped Beatrice from killing everyone!",10,2)
  Wait(3400 * (DialougeSpeed/100))
  TextPrintString("Jimmy: So uh... I win. Nobody wants to kiss me or anything? No crowd?",10,2)
  Wait(3500 * (DialougeSpeed/100))
  TextPrintString("Jimmy: Well this is a shitty ending...",10,2)
  Wait(2850 * (DialougeSpeed/100))
  MissionSucceed()
end

function F_DriveCar()
  local x,y,r1,r2,r3,r4 = 0,0,0,0,0,0
  while true do
    x,y = VehicleGetPosXYZ(car)
r1 = x + 1.75
r2 = y + 1.75
r3 = x - 1.75
r4 = y - 1.75
if PedInRectangle(gPlayer,r1,r2,r3,r4) and IsButtonBeingReleased(9,0) and not PedIsInAnyVehicle(gPlayer) and not IsButtonPressed(10,0) and not PedIsValid(PedGetGrappleTargetPed()) and not PedIsDead(gPlayer) then
  PedSetWeapon(gPlayer,-1)
  PedSetActionNode(gPlayer,"/Global/Player","Act/Player.act")
  Wait(50)
  PedWarpIntoCar(gPlayer,car)
end
Wait(0)
  end
end

function LoadAllAnim()
  LoadAnimationGroup("Authority")
  LoadAnimationGroup("Boxing")
  LoadAnimationGroup("B_Striker")
  LoadAnimationGroup("CV_Female")
  LoadAnimationGroup("CV_Male")
  LoadAnimationGroup("DO_Edgar")
  LoadAnimationGroup("DO_Grap")
  LoadAnimationGroup("DO_StrikeCombo")
  LoadAnimationGroup("DO_Striker")
  LoadAnimationGroup("F_Adult")
  LoadAnimationGroup("F_BULLY")
  LoadAnimationGroup("F_Crazy")
  LoadAnimationGroup("F_Douts")
  LoadAnimationGroup("F_Girls")
  LoadAnimationGroup("F_Greas")
  LoadAnimationGroup("F_Jocks")
  LoadAnimationGroup("F_Nerds")
  LoadAnimationGroup("F_OldPeds")
  LoadAnimationGroup("F_Pref")
  LoadAnimationGroup("F_Preps")
  LoadAnimationGroup("G_Grappler")
  LoadAnimationGroup("G_Johnny")
  LoadAnimationGroup("G_Striker")
  LoadAnimationGroup("Grap")
  LoadAnimationGroup("J_Damon")
  LoadAnimationGroup("J_Grappler")
  LoadAnimationGroup("J_Melee")
  LoadAnimationGroup("J_Ranged")
  LoadAnimationGroup("J_Striker")
  LoadAnimationGroup("LE_Orderly")
  LoadAnimationGroup("Nemesis")
  LoadAnimationGroup("N_Ranged")
  LoadAnimationGroup("N_Striker")
  LoadAnimationGroup("N_Striker_A")
  LoadAnimationGroup("N_Striker_B")
  LoadAnimationGroup("P_Grappler")
  LoadAnimationGroup("P_Striker")
  LoadAnimationGroup("PunchBag")
  LoadAnimationGroup("Qped")
  LoadAnimationGroup("Rat_Ped")
  LoadAnimationGroup("Russell")
  LoadAnimationGroup("Russell_Pbomb")
  LoadAnimationGroup("Straf_Dout")
  LoadAnimationGroup("Straf_Fat")
  LoadAnimationGroup("Straf_Female")
  LoadAnimationGroup("Straf_Male")
  LoadAnimationGroup("Straf_Nerd")
  LoadAnimationGroup("Straf_Prep")
  LoadAnimationGroup("Straf_Savage")
  LoadAnimationGroup("Straf_Wrest")
  LoadAnimationGroup("TE_Female")
end

I did not put many comments (if any) in the script, but I am pretty neat so hopefully it is still understandable. Any questions you have can be posted here, and I'll try to answer them.
Thanks to alontzedaka for glitch testing the mission, and playing it all the way through at least 20 times. XD

22
TUTORIALS / Threads
« on: November 10, 2014, 10:55:32 PM »
All your code runs on a thread, when your script first starts it's on the main thread, and all the code runs on that thread. However... let's say you wanted to make multiple codes run concurrently (at the same time), you could do this by making another thread, as all threads do run concurrently. This can be done in Bully LUA by simply using the function CreateThread(func). You just put a function name in the () to specify what function should run in the newly created thread. Here is an example:

Code: [Select]
main = function()
  CreateThread("F_Function2")
  repeat
    TextPrintString("Thread #1 Running",1,1)
Wait(0)
  until PedIsDead(gPlayer)
end

F_Function2 = function()
  repeat
    TextPrintString("Thread #2 Running",1,2)
Wait(0)
  until PedIsDead(gPlayer)
end

As you can see, CreateThread is called with "F_Function2" in the parenthesis in the start of the main function, so a new thread is created and the function F_Function2 is running in it. Since it's in it's own thread, it runs at the same time as the function "main" which is in the main thread. Now, both repeat loops are running at the same time, which you can see by testing the script and seeing that both the TextPrintStrings are printing text. (Note, this script won't work how it is now. MissionSetup and MissionCleanup need to be added, if compiling to ArcRace1.lur for example)

Make sure not to put CreateThread inside the repeat loop of main(), or any loop for that matter (unless you have good reason to do so) because if you do it will just keep creating threads, which may eventually result in a crash because of there being too many threads. I'm not sure what the limit is, but it's probably enough to where you don't have to worry about it. I personally only make like 3 or 4 at the most in a single script.

Using threads can really help code that needs multiple repeat loops. Maybe for example, one loop could just have a Wait(0) in it as the code needs to run quickly, but another could have a Wait(1000) and keep track of time accurately, by counting seconds.

Threads in Bully cannot be created with arguments, use global variables if you need to pass extra information to your threads.

23
Forum Questions/Help / Search bar? News?
« on: September 03, 2014, 05:33:57 PM »
Wtf happened? I have no search bar or news alerts... I always noticed searches were fairly slow on this site so I guess it was just removed instead of being fixed but why no news?

24
Script Modding / DaBOSS's LUA Reference
« on: August 24, 2014, 11:28:02 PM »
Don't know LUA? Read my tutorial!

Last Edit: 4/9/2016 | Added text versions that you can refer to and more topics to visit at the bottom of this post.

Note: This topic isn't 100% finished, nor even close with the functions list. I will still update it with more information regularly.

Text Version: Copy this into Notepad++ and depending on your text style the text should all line up nicely.
 IDs: http://pastebin.com/raw/1mPt9geB
 Functions: http://pastebin.com/raw/NdyrKaWt
 Speech: http://pastebin.com/raw/hRc467yG
 Action Nodes (from Scripts.img): http://pastebin.com/raw/CxFamYU2
 Action Nodes (from BB members): http://pastebin.com/raw/stR8D1ah



Functions
AddBlipForCar(Vehicle, BlipIcon, VisibilitySetting) | Returns created blip
AddBlipForChar(Ped, 0, BlipIcon, VisibilitySetting) | Returns created blip
AreaTransitionXYZ(AreaCode, X coord, Y coord, Z coord) | Move the player and his allies/enemies to a new area and/or position
BlipAddXYZ(X coord, Y coord, Z coord, BlipIcon) | Returns created blip
BlipRemove(Blip) | Delete a blip
CameraSetXYZ(X coord, Y coord, Z coord) | Set the position of the game camera
GameGetPedStat(Ped, Stat) | Returns the value of the stat of the ped
GameSetPedStat(Ped, Stat, NewValue) | Set the stat of the ped to the new value
GetStickValue(StickID,ControllerID) | Returns -1.0 - 1.0 representing how much the stick is pressed
IsButtonBeingPressed(ButtonID,ControllerID) | Returns true/false if the button specified was JUST pressed
IsButtonBeingReleased(ButtonID,ControllerID) | Returns true/false if the button specified was JUST released
IsButtonPressed(ButtonID,ControllerID) | Returns true/false if the button specified is being held down
PedCreateXYZ(PedIndex, X coord, Y coord, Z coord) | Returns created ped
PedDelete(Ped) | Delete a ped
PedDismissAllAllies(Ped) | Dismiss all allies of the ped
PedGetAllyFollower(Ped) | Returns the ped's ally follower
PedGetAllyLeader(Ped) | Returns the ped's ally leader
PedGetPosXYZ(Ped) | Returns the ped's position (3 values)
PedGetUniqueModelStatus(PedIndex) | Returns ped's unique model status -1 = Never Spawn, 1 = One Copy, 2 = Can Have Duplicates
PedHasAllyFollower(Ped) | Returns true/false if the ped has a follower
PedHasAllyLeader(Ped) | Returns true/false if the ped has a leader
PedMoveToXYZ(Ped, Speed, X coord, Y coord, Z coord) | Speed: 0 = Walk, 1 = Jog, 2 = Sprint
PedOverrideStat(Ped, Stat, NewValue) | Override the stat of the ped with the new value
PedRecruitAlly(Ped, Ped) | 1 ped can only have 1 follower, but that ped's follower can also have 1 follower to "chain" allies
PedSetEmotionTowardsPed(Ped, Ped, Emotion) | Set the 1st ped's emotion to the 2nd ped
PedSetInfiniteSprint(Ped, True/False) | Set if a ped can sprint forever
PedSetPedToTypeAttitude(Ped, Faction, Attitude) | Set the ped's attitude towards the faction
PedSetPosXYZ(Ped, X coord, Y coord, Z coord) | Set the position of a ped
PedSetTypeToTypeAttitude(Faction, Faction, Attitude) | Set the 1st faction's attitude towards the 2nd faction
PedSetUniqueModelStatus(PedIndex, Unique) | Unique: -1 = Never Spawn, 1 = One Copy, 2 = Can Have Duplicates
PedSetWeapon(Ped, Weapon, Ammo) | Set the weapon of the ped with the desired ammo
PlayerSetControl(Control) | Control: 0 = Controls disabled, 1 = Controls enabled
VehicleCreateXYZ(VehicleIndex, X coord, Y coord, Z coord) | Returns created vehicle
VehicleDelete(Vehicle) | Delete a vehicle
VehicleGetPosXYZ(Vehicle) | Returns the vehicle's position (3 values)
VehicleSetPosXYZ(Vehicle, X coord, Y coord, Z coord) | Set the position of a vehicle
VehicleSetColor(Vehicle, CarColor) | Set the color of a vehicle



Controls
Buttons
0   Show Secondary Tasks (Left)
1   Show Tasks/Objectives (Right)
2   Zoom in
3   Zoom out
4   Map Menu
5   Pause Menu
6   Melee Attack
7   Sprint
8   Jump
9   Grapple
10   Lock On
11   Previous Weapon
12   Weapon Fire
13   Next Weapon
14   Look Back
15   Crouch

Sticks
16   Movement (Left = 1,Right = -1)
17   Movement (Up = 1,Down = -1)
18   Camera (Left = 1,Right = -1)
19   Camera (Up = 1,Down = -1)

Controllers A keyboard is counted as a controller. Any device that you can play with
0   Player 1 (The controller/device controlling Jimmy)
1   Player 2 (The first controller/device not controlling Jimmy)



Blips
Icons
0   Yellow X
1   Blue X
3   Big Yellow X
4   Dollar Sign
5   Orange Bell
6   Grey Bell
8   Save Location
9   Bike Lock
10   Shopping Cart
11   Bike Shop
13   Barber Shop
14   Clothing Shop
15   Golden Shop
16   Bike
19   Errand
20   Trophy
22   Tattoo Parlor
23   Hobo Mission
24   Red Star
25   Yellow Star
26   Red X
29   Yellow X
30   Blue X
31   Big Yellow X
32   Yellow Star
33   Red Star
34   Red X
35   Transistor
36   Rubber Band
37   G&G Card
38   Gnome

VisibilitySetting Affects how car/char blips appear | Car blips will not show vision cones
0   Invisible
1   Radar Icon
2   Arrow
3   Vision Cone
4   Radar Icon + Arrow
5   Radar Icon + Arrow + Vision Cone



Attitudes
0   Hate
1   Dislike
2   Ignore
3   Like
4   Love



Emotions
0   Aggressive
1   Annoyed
2   Unfriendly
3   Dismissive
4   Very Scared
5   Scared
6   Intimidated
7   Friendly
8   Very Friendly



Vehicles
272 Race BMX
273 Retro BMX
274 Crap BMX
275 Police Bike
276 Scooter
277 Shop Class Bike
278 Blue BMX
279 Bicycle
280 Mountain Bike
281 Old Lady Bike
282 Racer Bike
283 Aquaberry Bike
284 Mower
285 Arcade 3
286 Taxi
287 Arcade 2
288 Dozer
289 Go Cart
290 Limo
291 Delivery Truck
292 Foreign Car
293 Regular Car
294 70 Wagon
295 Police Car
296 Domestic Car
297 Truck
298 Arcade 1


Vehicle Colors
0 black            
1 white            
2 police car blue      
3 cherry red         
4 midnight blue      
5 temple curtain purple
6 taxi yellow         
7 striking blue      
8 light blue grey      
9 hoods            
10 red1            
11 red2            
12 red3            
13 red4            
14 red5            
15 red6            
16 red7            
17 red8            
18 red9            
19 red10            
20 orange1         
21 orange2         
22 orange3         
23 orange4         
24 orange5         
25 orange6         
26 orange7         
27 orange8         
28 orange9         
29 orange10         
30 yellow1         
31 yellow2         
32 yellow3         
33 yellow4         
34 yellow5         
35 yellow6         
36 yellow7         
37 yellow8         
38 yellow9         
39 yellow10         
40 green1            
41 green2            
42 green3            
43 green4            
44 green5            
45 green6            
46 green7            
47 green8            
48 green9            
49 green10         
50 blue1            
51 blue2            
52 blue3            
53 blue4            
54 blue5            
55 blue6            
56 blue7            
57 blue8            
58 blue9            
59 blue10            
60 purple1         
61 purple2/blue      
62 purple3         
63 purple4         
64 purple5         
65 purple6         
66 purple7/grey      
67 purple8         
68 purple9         
69 purple10         
70 grey1            
71 grey2            
72 grey3            
73 grey4            
74 grey5            
75 grey6            
76 grey7            
77 grey8            
78 grey9            
79 grey10            
80 light1            
81 light2            
82 light3            
83 light4            
84 light5            
85 light6            
86 light7            
87 light8            
88 light9            
89 light10         
90 dark1            
91 dark2            
92 dark3            
93 dark4            
94 dark5            
95 blue11            
96 green11         
97 red11            
98 blue12            
99 offwhite         


Weapons
299   yardstick
300   bat
301   cherryb
302   baseball
303   slingshot
304   marble
305   spudg
306   supersling
307   brocketlauncher
308   brocket
309   stinkbomb
310   apple
311   brick
312   eggproj
313   snowball
314   yardstick_DMG
315   lid
316   potato
317   bat_DMG
318   dodgeball
319   W_Circuit
320   newsroll
321   spraycan
322   supermarble
323   twobyfour
324   sledgehammer
325   RBandBall
326   fireexting
327   bbagbottle
328   WCamera
329   SocBall
330   SnwBallB
331   Wftball
332   Wmallet
333   W_Comicbk
334   WBball
335   Wfrisbee
336   cricket_DMG
337   chemical
338   Wdish
339   Cigarette
340   W_bunchofpanties
341   pompom
342   wtrpipe
343   garbpick
344   W_Crab
345   WHatSVase
346   W_DeadRat
347   superglue
348   Wtray
349   BagMrbls
350   flask
351   chem_stir
352   Eyedrop
353   PlantPot
354   pVase_proj
355   dec_plate
356   pPlant_proj
357   cricket
358   Banana
359   Flowerbund
360   Psheild
361   W_bunchofphotos
362   FraffyCan
363   teddybear
364   SnowShwl
365   Grab_Beaker
366   Grab_Testtube_Right
367   Grab_Canister
368   Grab_Eyedrop
369   Grab_Testtube_Left
370   W_package
371   ChknLeg
372   kickme
373   oilcan
374   ratchet
375   torch
376   wrench
377   JBroom
378   AniFooty
379   W_Radio
380   barrel
381   ANIBBALL
382   cement
383   WBalloon
384   wtrpipeD
385   trophy
386   Boxcard01
387   CHShieldA
388   CHShieldB
389   CHShieldC
390   WHatVase
391   bbgun
392   W_charSheet
393   W_Candy
394   W_Itch
395   W_PGun
396   SuperSpudG
397   W_Fountain
398   W_Money
399   PooBag
400   WFtBomb
401   wtrpipeC
402   wtrpipeB
403   W_TPRoll
404   Umbrella
405   NerdBooks
406   W_Cane
407   W_Nacho
408   GOG_Player
409   DevilFork
410   PinkyWand
411   SSWhip
412   BoltCutters
413   NerdBooksB
414   NerdBooksC
415   NerdBooksD
416   NerdBooksE
417   Detonator
418   leadpipe
419   Tbone
420   W_Flashlight
421   AlgieJacCS
422   JBroom_DMG
423   W_JPhoto
424   ammo_scatter
425   Wgascan
426   WDigCam
427   fire_inv
428   W_Mug
429   Jimmy_Panties
430   PeanutUndie
431   W_ChocBox
432   W_diary
433   Stwins_bad
434   W_LabNotes
435   twobyfour_DMG
436   xmasgift
437   SK8Board
438   W_DrugBttl
439   drumstick
440   maracas
441   matchbox
442   matchstick
443   timstick
444   xylostick



Peds
Index   Model               Name            Fighting Style
0      player               Jimmy            Player
1      DEFAULTPED            Jimmy            Player
2      DOgirl_Zoe_EG         Zoe               GS_Female_A
3      NDGirl_Beatrice         Beatrice         GS_Female_A
4      NDH1a_Algernon         Algernon         N_Striker_B
5      NDH1_Fatty            Fatty            N_Striker_A
6      ND2nd_Melvin         Melvin            N_Striker_A
7      NDH2_Thad            Thad            N_Ranged_A
8      NDH3_Bucky            Bucky            N_Ranged_A
9      NDH2a_Cornelius         Cornelius         N_Ranged_A
10      NDLead_Earnest         Earnest            N_Ranged_A
11      NDH3a_Donald         Donald            N_Ranged_A
12      JKH1_Damon            Damon            J_Striker_A
13      JKH1a_Kirby            Kirby            J_Striker_A
14      JKGirl_Mandy         Mandy            GS_Female_A
15      JKH2_Dan            Dan               J_Striker_A
16      JKH2a_Luis            Luis            J_Grappler_A
17      JKH3_Casey            Casey            J_Melee_A
18      JKH3a_Bo            Bo               J_Melee_A
19      JKlead_Ted            Ted               J_Striker_A
20      JK2nd_Juri            Juri            J_Grappler_A
21      GR2nd_Peanut         Peanut            G_Striker_A
22      GRH2A_Hal            Hal               G_Grappler_A
23      GRlead_Johnny         Johnny            G_Striker_A
24      GRH1_Lefty            Lefty            G_Melee_A
25      GRGirl_Lola            Lola            GS_Female_A
26      GRH3_Lucky            Lucky            G_Striker_A
27      GRH1a_Vance            Vance            G_Melee_A
28      GRH3a_Ricky            Ricky            G_Striker_A
29      GRH2_Norton            Norton            G_Grappler_A
30      PRH1_Gord            Gord            P_Striker_A
31      PRH1a_Tad            Tad               P_Striker_A
32      PRH2a_Chad            Chad            P_Grappler_A
33      PR2nd_Bif            Bif               P_Striker_A
34      PRH3_Justin            Justin            P_Striker_B
35      PRH2_Bryce            Bryce            P_Grappler_A
36      PRH2_Bryce_OBOX         Bryce            P_Striker_A
37      PRlead_Darby         Darby            P_Striker_A
38      PRGirl_Pinky         Pinky            GS_Female_A
39      GN_Asiangirl         Angie            GS_Female_A
40      PRH3a_Parker         Parker            P_Striker_B
41      DOH2_Jerry            Jerry            DO_Grappler_A
42      DOH1a_Otto            Otto            DO_Striker_A
43      DOH2a_Leon            Leon            DO_Striker_A
44      DOH1_Duncan            Duncan            DO_Striker_A
45      DOH3_Henry            Henry            DO_Grappler_A
46      DOH3a_Gurney         Gurney            DO_Grappler_A
47      DO2nd_Omar            Omar            DO_Striker_A
48      DOGirl_Zoe            Zoe               GS_Female_A
49      PF2nd_Max            Max               Authority
50      PFH1_Seth            Seth            Authority
51      PFH2_Edward            Edward            Authority
52      PFlead_Karl            Karl            Authority
53      TO_Orderly            Theo            LE_Orderly_A
54      TE_HallMonitor         MissPeabody         TE_Female_A
55      TE_GymTeacher         MrBurton         Authority
56      TE_Janitor            MrLuntz            CV_Male_A
57      TE_English            MrGalloway         Authority
58      TE_Cafeteria         Edna            Authority
59      TE_Secretary         MissWinston         TE_Female_A
60      TE_Nurse            MrsMcRae         TE_Female_A
61      TE_MathTeacher         MrHuntingdon      Authority
62      TE_Librarian         MrsCarvin         TE_Female_A
63      TE_Art               MsPhillips         TE_Female_A
64      TE_Biology            MrSlawter         Authority
65      TE_Principal         DrCrabblesnitch      Authority
66      GN_Littleblkboy         Sheldon            GS_Male_A
67      GN_SexyGirl            Christy            GS_Female_A
68      GN_Littleblkgirl      Gloria            GS_Female_A
69      GN_Hispanicboy         Pedro            GS_Male_A
70      GN_Greekboy            Constantinos      GS_Male_A
71      GN_Fatboy            Ray               GS_Fat_A
72      GN_Boy01            Ivan            GS_Male_A
73      GN_Boy02            Trevor            GS_Male_A
74      GN_Fatgirl            Eunice            GS_Fat_A
75      DOlead_Russell         Russell            B_Striker_A
76      TO_Business1         DrBambillo         CV_Male_A
77      TO_Business2         MrSullivan         CV_Male_A
78      TO_BusinessW1         MsKopke            CV_Female_A
79      TO_BusinessW2         MsRushinski         CV_Female_A
80      TO_RichW1            MsIsaacs         CV_Female_A
81      TO_RichW2            BethanyJones      CV_Female_A
82      TO_Fireman            ORourke            CV_Male_A
83      TO_Cop               OfficerMonson      Authority
84      TO_Comic            ZackOwens         CV_Male_A
85      GN_Bully03            Trent            B_Striker_A
86      TO_Bikeowner         TobiasMason         CV_Male_A
87      TO_Hobo               MrGrant            CV_Male_A
88      Player_Mascot         Mascot            J_Mascot
89      TO_GroceryOwner         MrOh            CV_Male_A
90      GN_Sexygirl_UW         Christy            GS_Female_A
91      DOLead_Edgar         Edgar            DO_Striker_A
92      JK_LuisWrestle         Luis            J_Grappler_A
93      JKGirl_MandyUW         Mandy            GS_Female_A
94      PRGirl_PinkyUW         Pinky            GS_Female_A
95      NDGirl_BeatriceUW      Beatrice         GS_Female_A
96      GRGirl_LolaUW         Lola            GS_Female_A
97      TO_Cop2               OfficerWilliams      Authority
98      Player_OWres         Jimmy            Player
99      GN_Bully02            Davis            B_Striker_A
100      TO_RichM1            MrBreckindale      CV_Male_A
101      TO_RichM2            MrDoolin         CV_Male_A
102      GN_Bully01            Troy            B_Striker_A
103      TO_FireOwner         Nate            CV_Male_A
104      TO_CSOwner_2         MrCarmichael      CV_Male_A
105      TO_CSOwner_3         NickyCharles      CV_Male_A
106      TE_Chemistry         MrWatts            Authority
107      TO_Poorwoman         MissAbby         CV_OLD
108      TO_MotelOwner         Mihailovich         CV_Male_A
109      JKKirby_FB            Kirby            J_Striker_A
110      JKTed_FB            Ted               J_Striker_A
111      JKDan_FB            Dan               J_Striker_A
112      JKDamon_FB            Damon            J_Striker_A
113      TO_Carny02            Freeley            CV_Male_A
114      TO_Carny01            Dorsey            CV_Male_A
115      TO_CarnyMidget         Hector            CV_Male_A
116      TO_Poorman2            Osbourne         CV_Male_A
117      PRH2A_Chad_OBOX         Chad            P_Striker_A
118      PRH3_Justin_OBOX      Justin            P_Striker_A
119      PRH3a_Parker_OBOX      Parker            P_Striker_A
120      TO_BarberRich         MariaTheresa      CV_Female_A
121      GenericWrestler         Bob               GS_Male_A
122      ND_FattyWrestle         Fatty            GS_Male_A
123      TO_Industrial         Chuck            CV_Male_A
124      TO_Associate         Ian               CV_Male_A
125      TO_Asylumpatient      Fenwick            DO_Striker_A
126      TE_Autoshop            Neil            Authority
127      TO_Mailman            MrSvenson         CV_Male_A
128      TO_Tattooist         Denny            CV_Male_A
129      TE_Assylum            MrGalloway         Authority
130      Nemesis_Gary         Gary            B_Striker_A
131      TO_Oldman2            Krakauer         CV_OLD
132      TO_BarberPoor         MrMoratti         CV_Male_A
133      PR2nd_Bif_OBOX         Bif               P_Striker_A
134      Peter               Peter            GS_Male_A
135      TO_RichM3            MrSmith            CV_Male_A
136      Rat_Ped               Rat               AN_Rat
137      GN_LittleGirl_2         Melody            GS_Female_A
138      GN_LittleGirl_3         Karen            GS_Female_A
139      GN_WhiteBoy            Gordon            GS_Male_A
140      TO_FMidget            Brandy            GS_Male_A
141      Dog_Pitbull            Pitbull            AN_DOG
142      GN_SkinnyBboy         Lance            GS_Male_A
143      TO_Carnie_female      Crystal            CV_Female_A
144      TO_Business3         MrMartin         CV_Male_A
145      GN_Bully04            Ethan            B_Striker_A
146      GN_Bully05            Wade            B_Striker_A
147      GN_Bully06            Tom               B_Striker_A
148      TO_Business4         MrRamirez         CV_Male_A
149      TO_Business5         MrHuntingdon      CV_Male_A
150      DO_Otto_asylum         Otto            DO_Striker_A
151      TE_History            MrWiggins         Authority
152      TO_Record            Floyd            CV_Male_A
153      DO_Leon_Assylum         Leon            DO_Striker_A
154      DO_Henry_Assylum      Henry            DO_Striker_A
155      NDH1_FattyChocolate      Fatty            N_Striker_A
156      TO_GroceryClerk         Stan            CV_Male_A
157      TO_Handy            Handy            CV_OLD
158      TO_Orderly2            Gregory            LE_Orderly_A
159      GN_Hboy_Ween         Pedro            GS_Male_A
160      Nemesis_Ween         Gary            B_Striker_A
161      GRH3_Lucky_Ween         Lucky            G_Striker_A
162      NDH3a_Donald_ween      Donald            N_Ranged_A
163      PRH3a_Parker_Ween      Parker            P_Striker_B
164      JKH3_Casey_Ween         Casey            J_Melee_A
165      Peter_Ween            Peter            GS_Male_A
166      GN_AsianGirl_Ween      Angie            GS_Female_A
167      PRGirl_Pinky_Ween      Pinky            GS_Female_A
168      JKH1_Damon_ween         Damon            J_Striker_A
169      GN_WhiteBoy_Ween      Gordon            GS_Male_A
170      GN_Bully01_Ween         Ivan            B_Striker_A
171      GN_Boy02_Ween         Trevor            B_Striker_A
172      PR2nd_Bif_OBOX_D1      Bif               P_Striker_A
173      GRH1a_Vance_Ween      Vance            G_Melee_A
174      NDH2_Thad_Ween         Thad            N_Ranged_A
175      PRGirl_Pinky_BW         Pinky            GS_Female_A
176      DOlead_Russell_BU      Russell            B_Striker_A
177      PRH1a_Tad_BW         Tad               P_Striker_A
178      PRH2_Bryce_BW         Bryce            P_Grappler_A
179      PRH3_Justin_BW         Justin            P_Striker_B
180      GN_Asiangirl_CH         Angie            GS_Female_A
181      GN_Sexygirl_CH         Christy            GS_Female_A
182      PRGirl_Pinky_CH         Pinky            GS_Female_A
183      TO_NH_Res_01         MrBuba            CV_OLD
184      TO_NH_Res_02         MrGordon         CV_OLD
185      TO_NH_Res_03         MrsLisburn         CV_OLD
186      NDH1_Fatty_DM         Fatty            N_Striker_A
187      TO_PunkBarber         Betty            CV_Male_A
188      FightingMidget_01      Lightning         P_Striker_A
189      FightingMidget_02      Zeke            G_Striker_A
190      TO_Skeletonman         Alfred            CV_Male_A
191      TO_Beardedwoman         Paris            CV_Female_A
192      TO_CarnieMermaid      Courtney         CV_Female_A
193      TO_Siamesetwin2         Delilah            CV_Female_A
194      TO_Paintedman         Drew            CV_Male_A
195      TO_GN_Workman         Castillo         CV_Male_A
196      DOLead_Edgar_GS         Edgar            DO_Striker_A
197      DOH3a_Gurney_GS         Gurney            DO_Grappler_A
198      DOH2_Jerry_GS         Jerry            DO_Grappler_A
199      DOH2a_Leon_GS         Leon            DO_Striker_A
200      GRH2a_Hal_GS         Hal               G_Grappler_A
201      GRH2_Norton_GS         Norton            G_Grappler_A
202      GR2nd_Peanut_GS         Peanut            G_Striker_A
203      GRH1a_Vance_GS         Vance            G_Melee_A
204      JKH3a_Bo_GS            Bo               J_Melee_A
205      JKH1_Damon_GS         Damon            J_Striker_A
206      JK2nd_Juri_GS         Juri            J_Grappler_A
207      JKH1a_Kirby_GS         Kirby            J_Striker_A
208      NDH1a_Algernon_GS      Algernon         N_Striker_B
209      NDH3_Bucky_GS         Bucky            N_Ranged_A
210      NDH2_Thad_GS         Thad            N_Ranged_A
211      PRH3a_Parker_GS         Parker            P_Striker_B
212      PRH3_Justin_GS         Justin            P_Striker_B
213      PRH1a_Tad_GS         Tad               P_Striker_A
214      PRH1_Gord_GS         Gord            P_Striker_A
215      NDLead_Earnest_EG      Earnest            N_Ranged_A
216      JKlead_Ted_EG         Ted               J_Striker_A
217      GRlead_Johnny_EG      Johnny            G_Johnny
218      PRlead_Darby_EG         Darby            P_Striker_A
219      Dog_Pitbull2         Pitbull            AN_DOG
220      Dog_Pitbull3         Pitbull            AN_DOG
221      TE_CafeMU_W            Edna            Authority
222      TO_Millworker         McInnis            CV_Male_A
223      TO_Dockworker         Johnson            CV_Male_A
224      NDH2_Thad_PJ         Thad            N_Ranged_A
225      GN_Lblkboy_PJ         Sheldon            GS_Male_A
226      GN_Hboy_PJ            Pedro            GS_Male_A
227      GN_Boy01_PJ            Ivan            GS_Male_A
228      GN_Boy02_PJ            Trevor            GS_Male_A
229      TE_Gym_Incog         MrBurton         Authority
230      JK_Mandy_Towel         Mandy            GS_Female_A
231      JK_Bo_FB            Bo               J_Melee_A
232      JK_Casey_FB            Casey            J_Melee_A
233      PunchBag            PunchBag         B_Striker_A
234      TO_Cop3               OfficerMonson      Authority
235      GN_GreekboyUW         Constantinos      GS_Male_A
236      TO_Construct01         McInnis            CV_Male_A
237      TO_Construct02         McInnis            CV_Male_A
238      TO_Cop4               OfficerWilliams      Authority
239      PRH2_Bryce_OBOX_D1      Bryce            P_Striker_A
240      PRH2_Bryce_OBOX_D2      Bryce            P_Striker_A
241      PRH2A_Chad_OBOX_D1      Chad            P_Striker_A
242      PRH2A_Chad_OBOX_D2      Chad            P_Striker_A
243      PR2nd_Bif_OBOX_D2      Bif               P_Striker_A
244      PRH3_Justin_OBOX_D1      Justin            P_Striker_A
245      PRH3_Justin_OBOX_D2      Justin            P_Striker_A
246      PRH3a_Prkr_OBOX_D1      Parker            P_Striker_A
247      PRH3a_Prkr_OBOX_D2      Parker            P_Striker_A
248      TE_Geography         TEMP            Authority
249      TE_Music            TEMP            TE_Female_A
250      TO_ElfF               TEMP            GS_Male_A
251      TO_ElfM               TEMP            GS_Male_A
252      TO_HoboSanta         TEMP            CV_Male_A
253      TO_Santa            TEMP            CV_Male_A
254      TO_Santa_NB            TEMP            CV_Male_A
255      Peter_Nutcrack         Peter            GS_Male_A
256      GN_Fatgirl_Fairy      Eunice            GS_Fat_A
257      GN_Lgirl_2_Flower      Melody            GS_Female_A
258      GN_Hboy_Flower         Pedro            GS_Male_A



Not everything here was completely found by just me. Credit goes to the bully board community, as I got some of the information from various members.



Didn't find what you were looking for? Check out one of the following topics! Note that these topics do not dive into as much detail as I try to, and they may get a few small details about LUA scripting wrong, but overall they still serve as good references in my opinion.
 by Shrimp: http://www.bully-board.com/index.php?topic=23872.0
 by c00ld0c26: http://www.bully-board.com/index.php?topic=18725.0

25
TUTORIALS / LUA Tutorial
« on: August 24, 2014, 10:23:45 PM »
I made yet, another LUA tutorial. Hopefully you learn a lot from this tutorial and it helps you get started doing script mods. Bully is a pretty fun and easy game to mod once you get used to it. The tutorial may be boring until you get into doing actual Bully scripts. If you just read and make sure you understand everything in this tutorial, it will pay off a lot when making Bully scripts. If you can understand everything in this tutorial you will be a LUA modding master in no time!



Introduction
LUA is a scripting language that Bully uses for it's scripts. It uses LUA 5.0.2. LUA is currently on version 5.3. For this introduction I just want to explain some simple concepts of programming and scripting that applies to most languages, of course including LUA. A program/script is created in plain text, called the source file. The source file can then be compiled into machine code so the code can be understood by the computer, or interpreted at run time by an interpreter that will only need the source file, no compiled version. Or a hybrid of compiling and being interpreted. For LUA we need to compile it, which is done via LuaC. So you should download it. I suggest doing that right now so you can install visual studio while reading the rest of this tutorial to save some time. LUA needs visual studio because it was made in C, which needs the libraries included in visual studio. So that covers compilation, another big part of scripting is how the code will run. When the script starts, the code will begin at one point (usually the main function, discussed later) and read each code one by one and execute going downward in the file. There are things that can change the flow of execution though, such as functions and control flow. We will cover functions and control flow later in the tutorial.



Example
The best way to start learning will probably be by looking at an example. Here I will put a script to copy to a text editor or some type of LUA editor so we can compile it and see it in-game. I suggest using notepad++ for editing LUA files. This example should include many LUA concepts to be discussed in detail later.

Code: [Select]
-- Weapon Selector
local weaponSelect = 1

MissionSetup = function()
  AreaTransitionXYZ(0,270,-110,6)
  F_SetupWeapons()
end

function MissionCleanup()
 
end

function F_SetupWeapons()
  weapons = {
    {name = "Apple",model = 310}
    {name = "Banana",model = 358}
    {name = "Baseball",model = 302}
    {name = "Basket Ball",model = 381}
    {name = "Bat",model = 300}
    {name = "Big Firework",model = 397}
    {name = "Books 1",model = 405}
    {name = "Books 2",model = 413}
    {name = "Books 3",model = 414}
    {name = "Books 4",model = 415}
    {name = "Books 5",model = 416}
    {name = "Brick",model = 311}
    {name = "Broom",model = 377}
    {name = "Camera",model = 426}
    {name = "Dead Rat",model = 346}
    {name = "Devil Fork",model = 409}
    {name = "Dish",model = 338}
    {name = "Egg",model = 312}
    {name = "Fire Extinguisher",model = 326}
    {name = "Firework",model = 301}
    {name = "Flowers",model = 359}
    {name = "Football",model = 331}
    {name = "Football (Bomb)",model = 400}
    {name = "Frisbee",model = 335}
    {name = "Gold Pipe",model = 418}
    {name = "Itchy Powder",model = 394}
    {name = "Kick Me",model = 372}
    {name = "Lunch Tray",model = 348}
    {name = "Marbles",model = 349}
    {name = "News Roll",model = 320}
    {name = "Pinky Wand",model = 410}
    {name = "Plate",model = 355}
    {name = "Poison Gun",model = 395}
    {name = "Rocket Launcher",model = 307}
    {name = "Rubber Band",model = 325}
    {name = "Shield",model = 387}
    {name = "Metal Plate",model = 360}
    {name = "Skateboard",model = 437}
    {name = "Sledge Hammer",model = 324}
    {name = "Slingshot",model = 303}
    {name = "Snowball",model = 313}
    {name = "Snowball 2",model = 330}
    {name = "Soccer Ball",model = 329}
    {name = "Spray Can",model = 321}
    {name = "Spud Gun",model = 305}
    {name = "Stink Bomb",model = 309}
    {name = "Super Slingshot",model = 306}
    {name = "Super Spud Gun",model = 396}
    {name = "Trash Lid",model = 315}
    {name = "Trophy",model = 385}
    {name = "Umbrella",model = 404}
    {name = "Vase 1",model = 354}
    {name = "Vase 2",model = 353}
    {name = "Vase 3",model = 345}
    {name = "Water Baloon",model = 383}
    {name = "Water Pipe",model = 342}
    {name = "Whip",model = 411}
    {name = "Wood Paddle",model = 357}
    {name = "Wood Plank",model = 323}
    {name = "Yardstick",model = 299}
  }
end

function main()
  repeat
    F_WeaponSelect()
Wait(0)
  until not Alive
end

F_WeaponSelect = function()
  if IsButtonBeingPressed(0,0) and weaponSelect > 1 then
    weaponSelect = weaponSelect - 1
  elseif IsButtonBeingPressed(1,0) and weaponSelect < table.getn(weapons) then
    weaponSelect = weaponSelect + 1
  elseif IsButtonBeingPressed(3,0) then
    PedSetWeapon(gPlayer,weapons[weaponSelect].model,50)
  end
  TextPrintString("Weapon Selector\n\nWeapon: "..weapons[weaponSelect].name,1,1)
end

Copy the above code into notepad++ (Or whatever you decided to use) and save it as "WeaponSelector.lua". Or anything ending with .lua, the file extension for LUA files. There are several ways to go about compiling it which will be discussed later, but for now we will just drag it over LuaC.exe as that is an easy way to do it. LuaC.exe was included in the download link in the introduction. When you do this, it should make a file called LUAC.OUT. This is the compiled output of our script file. We now have a file that can be read by bully. But there is still 2 more things to do. First, rename the file to ArcRace1.lur. .lur is the file extension for compiled LUA scripts in Bully, and ArcRace1 is the name of the script for the arcade machine in the boy's dorm. We will be replacing that script as that script can be activated/launched easily by simply going to the arcade machine and playing since we will replace the old script that contained the arcade racing game. The script files for the game are located in /Scripts/Scripts.img. An IMG file is a file archive used by Bully and other Rockstar games. We will need something to open it up and put our file in, for now we will use MadmaN's IMG tool but we will discuss others later. Open the Scripts.img with the IMG tool. Find ArcRace1.lur inside the Scripts.img and delete it. There isn't a replace feature on this tool and it will let you put 2 files of the same name in without warning which may cause undesired results, so be careful. Once you delete the original one, add our new modified one by pressing Action and then Add. Once you add the new modified ArcRace.lur close the tool and launch Bully. When you get in-game go to the arcade machine and play. You should spawn outside of the dorm and have a weapon selection menu. Use objective left/right to navigate the weapon menu and the zoom out button to get the weapon. If you do see the weapon selector, congratulations! If not, I suggest you try to figure out what the problem was before moving on.

Now it is time to explain all of the concepts shown in the example. Only brief descriptions will be given here as everything will be explored in detail later.

Creating Functions: Examples of functions in the script are "MissionSetup", "MissionCleanup", "main", "F_SetupWeapons", and "F_WeaponSelect". Names of functions can be whatever you like, as long as they are not a reserved keyword (LUA syntax/stuff that notepad++ color codes) and not the name of a Bully function. Functions can be declared (created) by writing "functionName = function()" or "function functionName()" then putting a space, linebreak, tab, or combination of those 3 things then the word "end" which ends the function. The code in a function is executed when the function is called. Bully calls the function MissionSetup when a mission script starts (ArcRace1.lur is a mission script) then main after MissionSetup, then MissionCleanup after main. So those 3 functions are required in all mission scripts. Only main is required in scripts that are not missions.

Variables: The simplest example of a variable in the script is weaponSelect. It is declared a local variable by putting "local" before the variable. If we did not write "local" it would still be a variable, but global instead (There isn't anything to type before global variables, just don't put local). A variable is declared/created by optionally putting "local", the name of the variable, and optionally a '=' sign followed by the initial/starting value of the variable. Variables can keep track of numbers and other information.

Tables: "weapons = {}" declared a table called "weapons". The concept of tables is big/complex so we will get into it a lot more later.

Calling/Using Functions: There are too many examples of this to want to list, but all the words followed by '()' sometimes with numbers/text in between the '(' and ')' are function calls as long as they are not function declarations. You should be able to tell the difference because of being explained declaring/creating functions a moment ago. When a function is called, the code inside it gets executed. After the function reaches "end" or reaches "return" it will go back to the point in the code where the function was called.

Control Flow: The 'if', 'elseif', 'repeat' and 'until' keywords are all part of control flow in the example. Control flow will change the flow of the program so it executes differently then going straight down all the codes.

Comments: The 2 '-'s in the start of the script made the rest of that line a comment. Comments do not effect how the code is run at all, they are not executed when the script runs. They are meant as a way to put text for you (The coder) or people reading your code so the script can be more easily understood.



Variables
Variables are an important thing to know. They can hold information. An example of a variable would be if X = 6, then 7 + X would be 13. X is the variable and it holds the value 6. So when you add 7 to X (X equals 6) it's like 7 + 6. In LUA variables can hold more then just numbers. They can hold numbers, text, boolean, tables, lists and nil. We'll cover the first 3 and nil here and cover tables/lists later.
LUA is a dynamic language, so variables can equal any of the types without having to specify a type for the variable.
Names: A variable name pretty much has to follow the same rules as function names. Make sure variables are not the same name as a function you created. Also the same goes for creating function names, don't make it the same as a variable.

Numbers: A variable can equal a number. Negative/positive numbers and floating point (decimal) numbers. Some examples are X = 47, Variable = -62.4, YoDiggityDawg = 69.

Text: A variable can also hold text. The more technical term is a string. A string can be declared/created by putting text in between 2 "s or 2 's. The double quotes are usually preferred. So for example you could make a variable like var = "This is a string of text" or var = 'Some text'. You can also append (add) to strings by using 2 .s. Example:
name = "DaBOSS"
var = "Hello, I am "..name
After the code is executed, var will equal "Hello, I am DaBOSS". There is also a character called the escape character, it is the backslash. \. It is used to type "Hard to type" characters. Such as a tab, linebreak, quote, or backslash. Here is a list of the important ones, though it is not a full list.
\n = Linebreak
\t = Tab
\" = "
\' = '
\\ = \
The quotes are hard to type because they start and end the strings so if you wanted to make a string where a character was talking:
var = "Andy told me "I seen my dog pooping yesterday and was like woah, that's hot" and I flipped out". It would see the first quote and have that be the start of the string, but when it sees the next one it will stop. So var would equal "Andy told me ". If we used the \" though, it would read the " as normal text so it would work. Another solution is to use the 's instead.

Boolean: Boolean means true/false. Very simple. var = true, var = false. Using the keyword 'not' will invert the meaning of a boolean. For example, if you made var = not true it would be equal to false. Or var = not false it would equal true.

Nil: Nil is nothing. No storage. It isn't even 0, it doesn't hold a number, text, nothing. It is written by simply typing "nil"

Local: Local variables are declared by putting the keyword "local" in front of a variable. When you do not put "local" in front of a variable it is global. When a variable is global it can be used anywhere in the script. If it is local it can only be used in the scope it was declared in. Scope could be a function for example.
function Func1()
  local var = 1
end

function Func2()
  local var2 = var + 1
end
That code would cause an error because the variable var cannot be used as it is local to Func1. It can only be used in Func1 and no other functions.
There can be multiple local variables of the same name and it will work perfectly fine. Since the 2 variables are local to different functions/locations they just do not effect each other They are their own variables.
Also a warning, do not put "local" before a variable when using it. Only when creating it. For example:
local a = 42
a = 72.
If you put local before the 2nd a it would cause an error.

Declaring Multiple Variables: Let's say we wanted to declare 3 variables. 3 variables for coordinates X, Y, and Z. We COULD do...
local X = 270
local Y = -110
local Z = 6
or, we can use commas to declare multiple variables at once.
local X,Y,Z = 270,-110,6



Arithmetic
Math can be used in LUA. It can be used as a way to get numbers to assign to variables, and other uses as well.
+ is addition, - is subtraction, * is multiplication, / is division.
var1 = 42 + 7 * 8/4
var1 equals 56. the * and / operations are evaluation before the +. This is because of the order of operations.
42 + 7 * 8/4 - Beginning.
42 + 56 / 4 - Multiply 7 and 8.
42 + 14 - Divide 56 and 4.
56 - Add 42 and 14.
What if you wanted to do the addition first? You can use parenthesis ()
(42 + 7) * (8/4)
Now it will evaluate the () part first, and it will come down to 49 * 2. (8/4 = 2) Then it would be 98.



TextPrintString
This section will be short. TextPrintString is a function in Bully. When you call it, it can print text to the screen. It takes 3 arguments (things in the (parenthesis)) the text to be printed (As discussed in the variables section, text is made by using the "quotes"), a number that represents how long it stays on screen in seconds, and a number that represents where on the screen to be printed. 1 is the top of the screen, 2 is the bottom.
Examples:
TextPrintString("This is some text",5,1) -- Print "This is some text" on the top of the screen for 5 seconds.
TextPrintString("Yo dawg",9,2) -- Print "Yo dawg" on the bottom of the screen for 9 seconds.
local name,location = "Carl","Grove Street"
local str = "Yo dawg, my name is "..name.." and I live in "..location
TextPrintString(str,5,1) -- Print the value of the variable "str" on the top of the screen for 5 seconds.
This function is important to tell messages to the player of the mod. More bully functions are discussed later, this one just had to be explained first.



Relational Operators
Relational operators compare 2 values and return a boolean. (True/false). It uses the signs <, >, ==, <=,  >= and ~=. They can be used to assign values to boolean variables, be used as arguments to a function, or most importantly in Control Flow (The next section). Let's look at some examples.

local var = 25 < 24 -- var equals "false" because 25 is not less than 24.
local var = 40 == 40 -- var equals "true" because 25 does equal 25.
local var = 29 <= 29 -- var equals "true" because 29 is less than or equal to 29.
local var = 24 < 24 -- var equals "false" because 24 is not less than 24.
local var = 100 ~= 99 -- var equals "true" because 100 does not equal 99.

A common mistake is confusing == with =. The single = is used for assigning a value. The double == is used for comparison. All of the operators above except == can only be used with numbers. == can be used with strings and boolean as well. Examples:

"Yo dawg" == "Yo dawg" -- true
"No" == "Yes" -- false
true ~= false -- true because true is not false.
false == false -- true because false is false.



Control Flow
Control flow is what controls the order your code executes. So far we know that code will run from top to bottom, and calling a function will run all the code in it and return to the point in the code the function was called at. There is a lot more we can do however. What if we wanted to print the game counting to 1000? We could do...
TextPrintString(1,1,1)
TextPrintString(2,1,1)
TextPrintString(3,1,1)
...about 1000 lines of code later...
TextPrintString(1000,1,1)
but that would take a long time to do, and be very tedious. A solution is to use loops, loops are a part of control flow that lets us repeat a certain part of code until a condition is met. There are many types of loops. "while", "repeat", "do-while", and "for". For the counting example the "for" loop would work best but it is also the most complex type of loop. We'll use "repeat" since it was used in the example and you may be a bit familiar with it. If you aren't don't worry. Comments are used to guide you through the process.

local count = 1 -- declare a variable to remember where we are in the counting
repeat -- repeat the following code
  TextPrintString(count,1,1) -- print the value of "count" on the top of the screen for one second
  count = count + 1 -- add 1 to count
  Wait(1000) -- wait 1 second (see below)
until count >= 1000 -- repeat the code until "count" is greater than or equal to 1000

The function "Wait" hasn't been discussed yet, it is a function for Bully. It will pause the script for the time specified in milliseconds.
The repeat loop is pretty simple. Just repeat the code between "repeat" and "until" until the expression after "until" is true. You could also just put "true" or "false" for an infinite loop or a loop that only executes once. repeat does execute at least once, because it executes all the code and then tests if the expression is true/false after execution. If it is false, it will do the code again. Here are all of the loops:

Repeat Loop
repeat -- execute the code below
  -- code to repeat here
until boolean -- check if boolean equals false, if it does repeat the code again.
repeat checks if boolean is false after executing, so it will execute at least one time.

While Loop
while boolean do -- check if boolean equals true (Can be a boolean variable or a relational operator)
  -- code to repeat here
end -- end of the loop. check if the boolean above is still true. if it is repeat, otherwise move on.
while checks if boolean is true before executing. It won't execute even once if it is false, unlike repeat.

Do-While Loop
do
  -- code to repeat here
while boolean
do-while checks if boolean is true after executing. It is very similar to the repeat loop except it repeats if it is true instead of false.

For Loop
for var = num, compare, increment do
  -- code to repeat here
end
var: A variable name. This variable is declared/initialized once when the loop starts.
num: The initial/starting value for var.
compare: Number to compare var with. If var is less than or equal to it, the code will execute.
increment: The amount to increment var after every iteration of the loop. This part is optional, if it is not specified 1 is implied.

Since the for loop is kind of advanced compared to the others, here is an example of counting.
for c = 1, 1000 do
  TextPrintString(c,1,1)
  Wait(1000)
end

Bully Loops: There is something that all loops in Bully need. A loop will crash the game if it does not have the function "Wait" inside of it. Example:
while true do
  Wait(0)
end
The above will work
while true do
 
end
The above will crash the game.

Break: There is also something that you can put inside loops too cause them to break/stop executing early. When the code encounters "break" it will go to the end of the loop it is currently in without executing any more code. Example:
local count = 1
while true do
  break
  TextPrintString("Sup",1,1)
  Wait(0)
end
"Sup" is never printed in the example.

Conditional Statements: Along with loops are the conditional statements. They are actually fairly similar to loops, except they only execute once. The keywords if, else, elseif, then, and end are used for these conditional statements. This is the basic form of it:

if boolean then
  -- code to be executed
end

Along with that however, "else" can also be used instead of "end" if something should happen if it is false instead of true. "elseif" can be used like "else" but for also including another test. Even when "else" and "elseif" are used there still has to be an "end" at the end. "then" only has to appear after "if" or "elseif" not "else".
Here are a few examples to help you understand better:

if 24 > 50 then
  -- This code will not execute
end

if 25 ~= 25 then
  -- This code will not execute
else
  -- This code will execute
end

if true then
  -- This code will execute
elseif true then
  -- This will not
end

local age = 24
if age >= 21 then
  TextPrintString("You can drink beer",1,1)
elseif age >= 16 then
  TextPrintString("You can't drink beer, but at least you can drive",1,1)
elseif age >= 6 then
  TextPrintString("Well... shit you can't do much",1,1)
else
  TextPrintString("You can't do much but at least you don't have to go to school",1,1)
end



Functions
Functions have been discussed already in other sections of this tutorial, so a lot of this may be recap. For that reason it will be a bit more brief.
A function can be declared by writing:
function functionName()
  -- function contents/codes
end

or

functionName = function()
  -- function contents/codes
end

Both are equal, use whatever looks better to you. Usually people use the 2nd one but I prefer the first one. Inside can be all the code to be executed when the function is called. That can include setting variable values, and calling other functions. Naming functions follow the same rules as naming a variable. F_ is often used for function names (EX: F_Function). This does not do anything but organize your code. I usually do it but it is not necessary. The codes used by Bully (Such as TextPrintString,Wait,etc) do not have F_ in front of them so putting F_ in front of yours is a good way to ensure you do not accidentally name your function the same as a Bully function. A function can be called by putting it's name followed by (). EX: F_Function(). When a function is called it will execute all the code in the function then return to the point in code after the function call.

Function Parameters: When declaring a function, you can put variable names in between the parenthesis. They are called parameters. Parameters are important because often times functions need some type of information to be able to do their job. Here is an example for a function to add 2 numbers. Obviously this can be done by simply using the + operator but this is a simple way to show you how parameters work.

function Add(a,b)
  local c = a + b
  TextPrintString("The result is "..c,3,1)
end

When the function is called, it will add the 2 numbers together and print the result. When you call the function you have to give values for the parameters. These are called arguments. Example:
Add(4,2) -- 6 will be printed on screen
Variables can also be passed into the function. Example:

local num1 = 64
local num2 = 42
Add(num1,num2) -- 106 will be printed

Parameters are local to the function they are a part of. So for our Add example the variable 'a' and 'b' cannot be used anywhere else. If we do make a variable called 'a' somewhere else it will still work perfectly fine. The 2 'a' variables just do not relate to each other because they are in different locations. This was discussed earlier in the variables section.

Return: The keyword "return" works just like "break" but for functions. A function can exit before reaching the "end" by using the "return" statement. It does have something more then break though. That is returning a value. It is optional to return a value, but if a function does return a value it is simply put after the return statement. When a function returns a value the function can be called to get a value. Here is an example for our Add function.

function Add(a,b)
  local c = a + b
  return c
  TextPrintString("Yo",1,1)
end

local num = Add(42,7) -- num equals 49.

The string "Yo" is never printed because the function returns before that part of the code is reached.
If you don't put a function somewhere where it's returned value will be used, the value will just be ignored/lost.
You can also use functions that return a value as arguments.
Add(Add(4,6),10) -- 16



Tables
Basics:
If you know what an array is, a table is basically an array in LUA. If you have no idea what an array is, forget I said anything and keep reading.
Tables are types, and thus can be stored in variables. Tables however are special types... they can store more values in them. Check out this example, we'll make a table that has strings in it.
grove = {
  "Big Smoke",
  "Ryder",
  "Sweet",
  "Carl Johnson"
}

Notice the braces, the braces are what means the value is a table. {} for example is an empty table. Commas are required between each value in the table, and line breaks are optional but often look nice and neat. Any values inside the {} are initial values in the table when the table is created. Now... how do we use or change these values? Well, simple!
grove[key] will get a value in the table "grove". a key is basically a part of a table that a value is stored in. That may of sounded confusing... but it's quite simple once you get the idea of it. Let's dive into an example.
grove[1]. 1 is the key here. grove[1] will get the 1st "element" in the "grove" table. "element" is basically the technical term for a value in a table. when we make a table by putting values in {} the values are given keys starting from one. for example...
grove = {
  "Big Smoke", -- key 1
  "Ryder", -- key 2
  "Sweet", -- key 3
  "Carl Johnson" -- key 4
}

Simple enough. Often a "key" can be called an "index" which is fairly accurate too, but in lua it's technically called a key. We can use keys to get parts of a table, we can use the values or change them like this.
TextPrintString(grove[3],1,1) -- prints "Sweet".
grove[4] = "Busta" -- changes the value of the 4th element in "grove".
grove[6] = "New guy" -- Makes a new value in the table, the 6th element in the table. 5 is nothing still (nil)

So basically... a key can get a value in a table, the number of the key is which value in the table we get. 1st value... 6th value... whatever. But oh wait... there's more to it. Keys can be strings too!

ourTable = {
  aValue = "hello",
  secondValue = "shit",
  satan = 666,
  donut = "you can use multiple types of values in the same table, numbers and strings for example"
}

That is how we can initialize a table with string keys. It sort of looks like named variables inside the table.
To access them, it's quite simple.
ourTable["aValue"] -- the key is "aValue". which in our table, "hello" is at that key.

TextPrintString(ourTable["satan"],1,1) -- prints 666
ourTable["donut"] = "donuts are good"

Simple enough right? There is one more thing... we can also access these values with a dot . instead of ["key"]

TextPrintString(ourTable.satan,1,1) -- prints 666
ourTable.aValue = "roar"

Tables of tables:
Now let's dive into a new idea... tables of tables. This is very possible, you can make as many tables as you want in other tables. I'm just going to give a bunch of examples for this one.
cheese = {
  {"yo","hello","shit"},
  {"Mick3Mouse","is","a","faggot","but","is","still","my","friend"}
}

cheese[1] -- The first table in "cheese".
cheese[2] -- The second table in "cheese".
cheese[1][2] -- The second value in the first table of "cheese".

menu = {
   {name = "weapon selector",func = F_WeaponSelector},
   {name = "model selector",func = F_ModelSelector}
}

menu[2].name -- "model selector"
menu[1]["name"]() -- calls F_WeaponSelector.

Tables are copied by reference, not value:
As we know, assinging a variable to the value of another variable will copy the value of the variable by value. That may of just confused you but I'll show you what I mean.
apple = 46
orange = apple
apple = 50.

After those 3 lines, orange is still 46. apple was changed to 50, but that doesn't change orange. In the second line, apple was copied to orange by value. This means the value of apple at the time of that code being executed was copied to orange, and that's it.
Copying by reference will make a variable point to the other variable's value, it won't have it's own value but just always be the same value as the other variable as that variable is just a reference. In LUA, we cannot control when we copy by value or by reference. Tables are copied by reference, other types by value. Variables that refer to functions aren't really copied by value either but that's a little different and you shouldn't have to worry about that. Let's get into an example of what this effect does to us.

table1 = {"donut","cheese","apple"}

Obviously, table1[2] is "cheese".

table2 = table1

Okay, so we made a new table called table2 and made it equal table1. So... basically we copied the value of table1 to table2 right? No. Now table2 is a reference to table1. Watch this. (Or... read this)

table2[2] is "cheese", as you would expect.
table2[2] = "orange"

We changed the value of the 2nd element in "table2". But table2 isn't it's own table, it was copied by reference and thus only refers to table1. So changes to table2's values change table1 as well. Now table1[2] is also "orange"!
This can be used in positive ways if you just acknowledge that is exists. The biggest time this effect is shown is when you pass a table as an argument to a function. If the function interacts with it, it's value is changed as the argument/parameter is just a reference. Normally a function wouldn't be able to do anything to your value.
What if you want to copy a table by value though? Well you have to do it yourself. I have made a function that does this.

function CopyTable(t)
   local newTable = {}
   for key,value in pairs(t) do
      if type(value) ~= "table" then
         newTable[key] = value
      else
         newTable[key] = CopyTable(value)
      end
   end
   return newTable
end

Basically just put that function in your code, then we can do this:

table1 = {"donut","cheese","apple"}
table2 = CopyTable(table1)
table2[2] = "orange"

and table1[2] will still be cheese.

Table functions:
There are a few functions for interacting with tables as well. Here are a few.
table.insert(table,value) -- insert a new value into a table. will insert it in the key after the last key. I'm not sure how this works with tables that have string keys, I've only used it with numbered tables.
table.remove(table,key) -- remove a value in a table.
table.getn(table) -- basically get the size.
table.setn(table,n) -- set what the script sees the table's size as.



Bully Stuff
If you've made it this far, you are now ready to move onto making Bully mods with the language.
Ped IDs, Vehicle IDs: I may of said before a ped is a type. This isn't true though, the value returned by PedCreateXYZ for example is just a number. It is not a special type in LUA. It is a number, that refers to the ped. This number is technically called the ped's ID. Or for vehicles, the vehicle ID. Now you may be thinking... "but I thought a ped ID was the value in default.ide, like 134 for pete". Well... many people call that number an ID which sort of makes sense, but it's not technically accurate. Technically an ID is the number that refers to a ped, the value returned by PedCreateXYZ for example. It is also the value that is used for interacting with peds. So we can make a variable equal the value to simply keep track of the ped and use the ped. The number in default.ide is actually technically called the ped's index. Most people (including myself sometimes) say Ped ID when we mean Ped Index though, so if you hear Ped ID it's often safe to assume they mean index.
Update: The index actually can be called an ID, and people who call it that aren't wrong. But... it isn't a ped ID. I'll clarify the difference: A model id is the numbers in default.ide, also called indexes, or for peds the ped index. However a ped id is different, and not to be confused with model id. A ped id is the number referring to the ped in the world.

Functions: You know how functions work now. The biggest part of modding Bully is calling Bully's functions. They are what have the most effect in the game. Here is a useful function that servers well as an example: PedCreateXYZ.
The parameters are (pedModel, X coord, Y coord, Z coord) and it returns the ped created.
local ped = PedCreateXYZ(37,270,-110,6)
pedModel is a number, that represents a ped model. Coordinates are pretty simple. In Bully, X is left/right (West/East), Y is forward/backward (North/South) and Z is up/down.
Bully has so many functions, and to get them you can look in the Bully.exe using a hex editor or text editor. It will look pretty messed up at first, but you can find function names inside it. Sadly it will not tell you the parameters or return values of the functions, that is up to us modders to figure out. Try to guess what the name of a function may be and search for it inside the bully.exe file. Hopefully you will be at least a little close and be able to find the function you are looking for. Let's say we want to set a ped's health. We should figure that "health" would be in the name of the function. So search "health" inside of the Bully.exe. Eventually you should find PedSetHealth. It takes 2 parameters, the ped (Ped types were discussed earlier) and a number for the new amount of health. Here is an example to add 20 health to the player.
PedSetHealth(gPlayer,PedGetHealth(gPlayer) + 20)

Along with bully functions you can call, there are 3 that you can create that Bully will call. As discussed in the example, MissionSetup, main, and MissionCleanup. If it is a mission script like ArcRace1.lur it will call MissionSetup, main, then MissionCleanup. If it is not a mission it will call just main.

You can also find some Bully functions here. It doesn't have that many but I add to it occasionally...



Modding Other Scripts
Modding ArcRace1 is perfect because you can replace all of it's code without effecting any other parts of Bully except for ArcRace. If you want to mod the game in free roam (Without having to mod ArcRace/a mod that runs during missions) then I suggest modding STimeCycle.lur. The game needs some code in that script to work however, so you should add onto the source of that file and recompile instead of replacing all of the code. The source code is available here thanks to MadmaN for releasing the source of STimeCycle.lua. You can mod many other scripts as well, go ahead and experiment!



Other Stuff
There are some things I didn't yet cover but should be discussed.

Function Type: A function is a type. You can store a function as a variable. Example:

function DoStuff()
  AreaTransitionXYZ(0,270,-110,6)
  PedSetHealth(gPlayer,1000)
  PedSetWeapon(gPlayer,305,50)
  PedRecruitAlly(gPlayer,PedCreateXYZ(134,270,-108,6))
end

local var = DoStuff
var()

Other IMG Tools: There are more IMG tools then just MadmaN's that you can use.
IMG Tool 2: This was meant for GTA 3 and it does not work well for Bully and I advise you do not use it. Some people do anyway...
MadmaN's IMG Toolkit: This one is probably the best choice. It works the best, but only runs through a console. It does not have a GUI. [Download]

Compiling: There are more ways to compile LUA scripts then by dragging it over LuaC.exe. They are in the ReadMe file of the LuaC release. It is through using the command line.

Making a Batch File: Making a simple batch file for LUA scripts can help save a LOT of time. LuaC.exe and IMG Toolkit V1 both have options for the command line. You can make a batch file to compile your LUA script and put it into the Scripts.img in a fraction of a second. A batch file works just like the command line except it runs multiple commands without you having to type anything yourself. Learn more here.



Conclusion
Hopefully you have learned something from this tutorial. Good luck making mods! If you have any questions post them here, in the modding questions & help section, or in requests. If you make a mod you want to release to the public you can upload it here or on some other site and share in the releases section. Add me on XFire or Skype (DaBOSS54320) if you want to talk to me personally.
This tutorial just teaches you the basics and core of LUA modding. There is a lot more to learn, look around the forums here to learn more.
Also you can learn a lot related more closely to Bully from reading c00l's tutorial and the official LUA 5.0 documentation, though note that Bully does not support everything the official documentation discusses.
Also check out BullyMods.net It has modding discussion as well.

26
Suggestions & Feedback / Topic Deletion
« on: August 19, 2014, 04:51:51 PM »
I understand the purpose of removing the option to delete topics unless you are an admin, but I think it'd be a better idea if you were only unable to delete it after it reached a certain number of replies. Like if you make a topic that only gets 1 or 2 replies, and want to delete it you should be able to since it won't mess up post counts much. Or maybe make a new place for topics that normal users can delete/move their topics too. It's like a trash but for all users. You can then delete a topic and it'll move the topic there so post counts aren't lost. And then when it goes there people can still view the topics with the knowledge that some of them may be stupid/trash since they got deleted but they get locked when moved there so they do not get replied/bumped.

Just some ideas...

27
Bully Modding Archives / What did you mod today?
« on: August 07, 2014, 03:21:00 PM »
Here you can share what ever you modded in bully today.

Even if all you did was test a function or two or change a little texture, if you want to share it go right ahead.
This topic is pretty much for sharing mods you are working on and don't want a topic for yet, or are just not big enough mods to where you want to give them their own topic.


Right now I am working on the next (Probably last, but I said that last time too) Super Mod.

28
Bully Modding Archives / LUA Shaders Folder
« on: August 07, 2014, 03:03:20 PM »
This has happened to me a few times now. It doesn't have any positive/negative effect really but it is still odd. I have been making Super Mod Final (Yes, remaking it to be better) and I've compiled it at least like 100 different times now, and a Shaders folder has been generated in the folder I keep my source files for the super mod. Inside it is a "Generated" folder but it is empty. Has this happened to anybody else/does anybody know why it happens?

29
Mod Releases Archive / Trouble Meter Mod
« on: August 06, 2014, 10:22:16 AM »
It's an uncreative name... I know D:

This mod changes the way the trouble meter works. Now you cannot get a red wanted level unless you resist arrest/being busted for too long. Also when you do resist arrest that much, police/prefects will be forced to fight you rather then continue to try to bust you, and trust me they are good fighters!

You can also do similar with the adults. You cannot get a red wanted level from fighting adults but you can fight them now and also humilate them. They will still try to bust you for a while but like authority, they will start to fight after you resist too much or attack them.

Download: BullyMods / MediaFire

30
MadmaN's Insane Asylum / Happy Birthday MadmaN
« on: August 01, 2014, 05:27:07 AM »
I'm just the birthday guy aren't I? Was gonna let someone else do this topic since I just did Chuck's but... I guess no-one is so here we go!

Happy Birthday to the best and most revolutionary Bully modder I've ever met

Pages: 1 [2] 3 4 ... 6