Fallout Wiki
Advertisement
Fallout Wiki
Transcript

procedure start;
procedure stranger;
procedure Lighting;
procedure choose_start;
procedure North_table;
procedure South_table;
procedure Shady_table;
procedure Raider_table;
procedure Junk_table;
procedure Hub_table;
procedure Necrop_table;
procedure Steel_table;
procedure Vats_table;
procedure Glow_table;
procedure Bone_table;
procedure Death_table;
procedure North1;
procedure North2;
procedure North3;
procedure North4;
procedure North5;
procedure North6;
procedure South1;
procedure South2;
procedure South3;
procedure South4;
procedure South5;
procedure South6;
procedure Shady1;
procedure Shady2;
procedure Shady3;
procedure Shady4;
procedure Shady5;
procedure Shady6;
procedure Raider1;
procedure Raider2;
procedure Raider3;
procedure Raider4;
procedure Raider5;
procedure Raider6;
procedure Junk1;
procedure Junk2;
procedure Junk3;
procedure Junk4;
procedure Junk5;
procedure Junk6;
procedure Hub1;
procedure Hub2;
procedure Hub3;
procedure Hub4;
procedure Hub5;
procedure Hub6;
procedure Necrop1;
procedure Necrop2;
procedure Necrop3;
procedure Necrop4;
procedure Necrop5;
procedure Necrop6;
procedure Steel1;
procedure Steel2;
procedure Steel3;
procedure Steel4;
procedure Steel5;
procedure Steel6;
procedure Vats1;
procedure Vats2;
procedure Vats3;
procedure Vats4;
procedure Vats5;
procedure Vats6;
procedure Glow1;
procedure Glow2;
procedure Glow3;
procedure Glow4;
procedure Glow5;
procedure Glow6;
procedure Death1;
procedure Death2;
procedure Death3;
procedure Death4;
procedure Death5;
procedure Death6;
procedure Bone1;
procedure Bone2;
procedure Bone3;
procedure Bone4;
procedure Bone5;
procedure Bone6;
procedure Scenes;
procedure Place_critter;
procedure hunters;
procedure add_party;
procedure update_party;
procedure remove_party;

variable party_elevation;
variable dude_start_hex;

export variable Ian_ptr;
export variable Dog_ptr;
export variable Tycho_ptr;
export variable Katja_ptr;
export variable Tandi_ptr;

variable Dude_tile;
variable Place_Holder;
variable Encounter_Num;
variable Tot_Critter_A;
variable Tot_Critter_B;
variable Scorpions_Killed;
variable Skill_roll;
variable Item;
variable money;
variable Ranger_rerolls;
variable victim;
variable Critter;
variable Inner_ring;
variable Outer_ring;
variable Critter_direction;
variable Critter_tile;
variable Critter_type;
variable Critter_script := -1;
variable dude_pos;
variable dude_rot;
variable group_angle;
variable Range;

export variable random_seed_1;
export variable random_seed_2;
export variable random_seed_3;

procedure Darkness;
procedure Invasion;
procedure start
begin
    if (script_action == map_enter_proc) then begin
        dude_rot := random(0, 5);
        set_global_var(GVAR_SAVE_TANDI_6, 0);
        if ((global_var(GVAR_LOAD_MAP_INDEX) != 1) and metarule(14, 0)) then begin
            Ranger_rerolls := has_trait(TTRAIT_PERK, dude_obj, PERK_ranger);
            set_global_var(GVAR_SAVE_TANDI_5, 0);
            while (Encounter_Num == 0) do begin
                Encounter_Num := random(1, 6) + random(1, 6) + random(1, 6);
                if (get_critter_stat(dude_obj, STAT_lu) > 8) then begin
                    Encounter_Num := Encounter_Num + 2;
                end
                else begin
                    if (get_critter_stat(dude_obj, STAT_lu) > 6) then begin
                        Encounter_Num := Encounter_Num + 1;
                    end
                    else begin
                        if (get_critter_stat(dude_obj, STAT_lu) < 3) then begin
                            Encounter_Num := Encounter_Num - 1;
                        end
                    end
                end
                if ((global_var(GVAR_HUNTER_STATUS) != 3) and (global_var(GVAR_CHILDKILLER_REPUATION) > 2) and random(0, 1)) then begin
                    Encounter_Num := 7;
                end
                else begin
                    if (Encounter_Num <= 3) then begin
                        Encounter_Num := 1;
                    end
                    else begin
                        if (Encounter_Num <= 5) then begin
                            Encounter_Num := 2;
                        end
                        else begin
                            if (Encounter_Num <= 8) then begin
                                Encounter_Num := 3;
                            end
                            else begin
                                if (Encounter_Num <= 12) then begin
                                    Encounter_Num := 4;
                                end
                                else begin
                                    if (Encounter_Num <= 15) then begin
                                        Encounter_Num := 5;
                                    end
                                    else begin
                                        Encounter_Num := 6;
                                    end
                                end
                            end
                        end
                    end
                end
                if (global_var(GVAR_WORLD_TERRAIN) == 0) then begin
                    call North_table();
                end
                else begin
                    if (global_var(GVAR_WORLD_TERRAIN) == 1) then begin
                        call South_table();
                    end
                    else begin
                        if (global_var(GVAR_WORLD_TERRAIN) == 5) then begin
                            call Shady_table();
                        end
                        else begin
                            if (global_var(GVAR_WORLD_TERRAIN) == 6) then begin
                                call Raider_table();
                            end
                            else begin
                                if (global_var(GVAR_WORLD_TERRAIN) == 7) then begin
                                    call Junk_table();
                                end
                                else begin
                                    if (global_var(GVAR_WORLD_TERRAIN) == 8) then begin
                                        call Hub_table();
                                    end
                                    else begin
                                        if (global_var(GVAR_WORLD_TERRAIN) == 9) then begin
                                            call Necrop_table();
                                        end
                                        else begin
                                            if (global_var(GVAR_WORLD_TERRAIN) == 10) then begin
                                                call Steel_table();
                                            end
                                            else begin
                                                if (global_var(GVAR_WORLD_TERRAIN) == 11) then begin
                                                    call Vats_table();
                                                end
                                                else begin
                                                    if (global_var(GVAR_WORLD_TERRAIN) == 12) then begin
                                                        call Glow_table();
                                                    end
                                                    else begin
                                                        if (global_var(GVAR_WORLD_TERRAIN) == 14) then begin
                                                            call Death_table();
                                                        end
                                                        else begin
                                                            if (global_var(GVAR_WORLD_TERRAIN) == 13) then begin
                                                                call Bone_table();
                                                            end
                                                            else begin
                                                                if (random(0, 1)) then begin
                                                                    call North_table();
                                                                end
                                                                else begin
                                                                    call South_table();
                                                                end
                                                            end
                                                        end
                                                    end
                                                end
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
        else begin
            if (metarule(14, 0)) then begin
                dude_pos := random(0, 3);
                Dude_tile := tile_num(dude_obj);
                call Scenes();
                if (dude_pos == 0) then begin
                    override_map_start(109, 72, 0, dude_rot);
                end
                else begin
                    if (dude_pos == 1) then begin
                        override_map_start(131, 102, 0, dude_rot);
                    end
                    else begin
                        if (dude_pos == 2) then begin
                            override_map_start(90, 112, 0, dude_rot);
                        end
                        else begin
                            override_map_start(80, 86, 0, dude_rot);
                        end
                    end
                end
            end
        end
        call Lighting();
    end
    else begin
        if (script_action == map_update_proc) then begin
            call Lighting();
        end
        else begin
            if (script_action == map_exit_proc) then begin
                Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 0);
                if (Scorpions_Killed == 1) then begin
                    if (is_success(Skill_roll)) then begin
                        if (is_critical(Skill_roll)) then begin
                            display_msg(message_str(SCRIPT_RNDDESRT, 100));
                        end
                        else begin
                            display_msg(message_str(SCRIPT_RNDDESRT, 101));
                        end
                    end
                    else begin
                        if (is_critical(Skill_roll)) then begin
                            display_msg(message_str(SCRIPT_RNDDESRT, 102));
                        end
                        else begin
                            display_msg(message_str(SCRIPT_RNDDESRT, 103));
                        end
                    end
                end
            end
        end
    end
end

procedure stranger
begin
    variable LVar0 := 1;
    if (has_trait(TTRAIT_PERK, dude_obj, PERK_mysterious_stranger) and (global_var(GVAR_STRANGER_STATUS) == 0) and random(0, 1)) then begin
        Critter_type := 16777520;
        Critter_script := 856;
        Critter_direction := random(0, 5);
        Outer_ring := 7;
        Inner_ring := 4;
        call Place_critter();
        Critter_direction := dude_rot + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        anim(Critter, 1000, Critter_direction);
        Item := create_object(7, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(40, 0, 0);
        add_mult_objs_to_inven(Critter, Item, 2);
        Item := item_caps_adjust(Critter, random(7, 30) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
        LVar0 := global_var(GVAR_WATER_THIEF_1);
        if (LVar0 == 1) then begin
            set_global_var(GVAR_WATER_THIEF_1, 10);
        end
        else begin
            if (LVar0 == 2) then begin
                set_global_var(GVAR_WATER_THIEF_1, 9);
            end
            else begin
                set_global_var(GVAR_WATER_THIEF_1, 15);
            end
        end
    end
end

procedure Lighting
begin
    variable LVar0 := 0;
    LVar0 := game_time_hour;
    if ((LVar0 >= 600) and (LVar0 < 700)) then begin
        set_light_level(LVar0 - 600 + 40);
    end
    else begin
        if ((LVar0 >= 700) and (LVar0 < 1800)) then begin
            set_light_level(100);
        end
        else begin
            if ((LVar0 >= 1800) and (LVar0 < 1900)) then begin
                set_light_level(100 - (LVar0 - 1800));
            end
            else begin
                set_light_level(40);
            end
        end
    end
end

procedure choose_start
begin
    dude_pos := random(0, 3);
    if (global_var(GVAR_WORLD_TERRAIN) == 1) then begin
        if (Encounter_Num == 1) then begin
            override_map_start(93, 91, 0, 1);
        end
        else begin
            if (dude_pos == 0) then begin
                override_map_start(109, 72, 0, dude_rot);
            end
            else begin
                if (dude_pos == 1) then begin
                    override_map_start(131, 102, 0, dude_rot);
                end
                else begin
                    if (dude_pos == 2) then begin
                        override_map_start(90, 112, 0, dude_rot);
                    end
                    else begin
                        override_map_start(80, 86, 0, dude_rot);
                    end
                end
            end
        end
    end
    else begin
        if (global_var(GVAR_WORLD_TERRAIN) == 10) then begin
            if ((Encounter_Num == 1) or (Encounter_Num == 5) or (Encounter_Num == 6)) then begin
                override_map_start(100, 100, 0, dude_rot);
            end
            else begin
                if (dude_pos == 0) then begin
                    override_map_start(109, 72, 0, dude_rot);
                end
                else begin
                    if (dude_pos == 1) then begin
                        override_map_start(131, 102, 0, dude_rot);
                    end
                    else begin
                        if (dude_pos == 2) then begin
                            override_map_start(90, 112, 0, dude_rot);
                        end
                        else begin
                            override_map_start(80, 86, 0, dude_rot);
                        end
                    end
                end
            end
        end
        else begin
            if (dude_pos == 0) then begin
                override_map_start(109, 72, 0, dude_rot);
            end
            else begin
                if (dude_pos == 1) then begin
                    override_map_start(131, 102, 0, dude_rot);
                end
                else begin
                    if (dude_pos == 2) then begin
                        override_map_start(90, 112, 0, dude_rot);
                    end
                    else begin
                        override_map_start(80, 86, 0, dude_rot);
                    end
                end
            end
        end
    end
    Dude_tile := tile_num(dude_obj);
    call Scenes();
end

procedure North_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 1) or (Encounter_Num == 2) or (Encounter_Num == 3) or (Encounter_Num == 4) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Northern Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call North1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call North2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call North3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call North4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call North5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call North6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure South_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 2) or (Encounter_Num == 4) or (Encounter_Num == 5) or (Encounter_Num == 6) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Southern Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call South1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call South2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call South3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call South4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call South5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call South6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Shady_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 1) or (Encounter_Num == 3) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Shady Sands Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Shady1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Shady2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Shady3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Shady4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Shady5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Shady6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Raider_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 1) or (Encounter_Num == 3) or (Encounter_Num == 4) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Raiders Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Raider1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Raider2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Raider3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Raider4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Raider5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Raider6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Junk_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 1) or (Encounter_Num == 2) or (Encounter_Num == 3) or (Encounter_Num == 4) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Junk Town Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Junk1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Junk2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Junk3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Junk4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Junk5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Junk6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Hub_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 2) or (Encounter_Num == 3) or (Encounter_Num == 4) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Hub Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Hub1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Hub2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Hub3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Hub4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Hub5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Hub6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Necrop_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 2) or (Encounter_Num == 3) or (Encounter_Num == 5) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Necropolis Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Necrop1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Necrop2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Necrop3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Necrop4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Necrop5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Necrop6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Steel_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 1) or (Encounter_Num == 2) or (Encounter_Num == 4) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Brotherhood of Steel Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Steel1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Steel2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Steel3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Steel4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Steel5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Steel6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Vats_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 1) or (Encounter_Num == 2) or (Encounter_Num == 3) or (Encounter_Num == 4) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Vats Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Vats1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Vats2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Vats3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Vats4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Vats5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Vats6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Glow_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 1) or (Encounter_Num == 3) or (Encounter_Num == 4) or (Encounter_Num == 5) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Glow Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Glow1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Glow2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Glow3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Glow4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Glow5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Glow6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Bone_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 1) or (Encounter_Num == 3) or (Encounter_Num == 5) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Bone Desert encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Bone1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Bone2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Bone3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Bone4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Bone5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Bone6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure Death_table
begin
    if (Ranger_rerolls) then begin
        Ranger_rerolls := Ranger_rerolls - 1;
        if ((Encounter_Num == 1) or (Encounter_Num == 2) or (Encounter_Num == 4) or (Encounter_Num == 6) or (Encounter_Num == 7)) then begin
            Encounter_Num := 0;
        end
    end
    if (global_var(GVAR_WATER_THIEF_8)) then begin
        Encounter_Num := global_var(GVAR_WATER_THIEF_8);
        set_global_var(GVAR_WATER_THIEF_8, 0);
        debug_msg("Death Claw encounter type: " + Encounter_Num);
    end
    if (Encounter_Num) then begin
        call choose_start();
        if (Encounter_Num == 1) then begin
            call Death1();
        end
        else begin
            if (Encounter_Num == 2) then begin
                call Death2();
            end
            else begin
                if (Encounter_Num == 3) then begin
                    call Death3();
                end
                else begin
                    if (Encounter_Num == 4) then begin
                        call Death4();
                    end
                    else begin
                        if (Encounter_Num == 5) then begin
                            call Death5();
                        end
                        else begin
                            if (Encounter_Num == 6) then begin
                                call Death6();
                            end
                            else begin
                                call hunters();
                            end
                        end
                    end
                end
            end
        end
    end
end

procedure North1
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 104));
    Tot_Critter_A := random(3, 6);
    Tot_Critter_B := random(4, 8);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
    group_angle := random(0, 5);
    Critter_type := 16777227;
    Critter_script := 12;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    victim := Critter;
    Critter_script := 222;
    if (group_angle == 0) then begin
        group_angle := 3;
    end
    else begin
        if (group_angle == 1) then begin
            group_angle := 4;
        end
        else begin
            if (group_angle == 2) then begin
                group_angle := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    group_angle := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        group_angle := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            group_angle := 2;
                        end
                    end
                end
            end
        end
    end
    while (Tot_Critter_B) do begin
        if (random(0, 3) == 3) then begin
            Critter_type := 16777226;
        end
        else begin
            Critter_type := 16777378;
        end
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    attack_setup(dude_obj, victim);
    attack_setup(dude_obj, Critter);
    attack_setup(Critter, victim);
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure North2
begin
    variable LVar0 := 0;
    Tot_Critter_A := random(1, 2);
    Tot_Critter_B := random(3, 5);
    group_angle := random(0, 5);
    if (is_success(do_check(dude_obj, STAT_pe, -2)) or has_trait(TTRAIT_PERK, dude_obj, PERK_bonus_awareness)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 197));
        Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 7;
        Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 5;
    end
    else begin
        display_msg(message_str(SCRIPT_RNDDESRT, 105));
        LVar0 := 1;
        Outer_ring := 5;
        Inner_ring := 2;
    end
    Critter_type := 16777419;
    Critter_script := 749;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (LVar0) then begin
            anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        end
        else begin
            anim(Critter, 1000, random(0, 5));
        end
        if (random(0, 1)) then begin
            if (random(0, 1)) then begin
                Item := create_object(18, 0, 0);
            end
            else begin
                Item := create_object(8, 0, 0);
            end
        end
        else begin
            Item := create_object(4, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        Item := item_caps_adjust(Critter, (random(1, 20) * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Outer_ring := Outer_ring + 2;
    Inner_ring := Inner_ring + 2;
    while (Tot_Critter_B) do begin
        if (random(0, 1)) then begin
            Critter_type := 16777449;
        end
        else begin
            Critter_type := 16777432;
        end
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (LVar0) then begin
            anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        end
        else begin
            anim(Critter, 1000, random(0, 5));
        end
        if (random(0, 1)) then begin
            if (random(0, 1)) then begin
                Item := create_object(18, 0, 0);
            end
            else begin
                Item := create_object(8, 0, 0);
            end
        end
        else begin
            Item := create_object(4, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        Item := item_caps_adjust(Critter, random(1, 25) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure North3
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 106));
    Tot_Critter_A := random(4, 6);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    Critter_type := 16777227;
    Critter_script := 12;
    group_angle := random(0, 5);
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle;
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777229;
    Critter_direction := random(0, 5);
    Outer_ring := 4;
    Inner_ring := 2;
    call Place_critter();
    anim(Critter, 1000, random(0, 5));
    Item := item_caps_adjust(Critter, random(40, 100) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
    if (random(0, 1)) then begin
        Item := create_object(40, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    kill_critter(Critter, 61);
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure North4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 107));
    Tot_Critter_A := random(2, 4);
    group_angle := random(0, 5);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    Inner_ring := get_critter_stat(dude_obj, STAT_pe) / 2;
    Critter_type := 16777227;
    Critter_script := 12;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 3 * 2) - 3);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure North5
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 108));
    Tot_Critter_A := random(2, 6);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 8;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
    Critter_script := 222;
    while (Tot_Critter_A) do begin
        if (random(0, 3) == 3) then begin
            Critter_type := 16777226;
        end
        else begin
            Critter_type := 16777378;
        end
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, random(0, 5));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure North6
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6);
    if (obj_is_carrying_obj_pid(dude_obj, 126)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 125));
        destroy_object(obj_carrying_pid_obj(dude_obj, 126));
    end
    else begin
        Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
        if (is_success(Skill_roll)) then begin
            if (LVar0 == 1) then begin
                display_msg(message_str(SCRIPT_RNDDESRT, 109));
            end
            else begin
                display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
            end
        end
        else begin
            if (is_critical(Skill_roll)) then begin
                LVar1 := random(2, 4);
                if (LVar0 == 1) then begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 112) + LVar1 + message_str(SCRIPT_RNDDESRT, 113));
                end
                else begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
                end
                critter_injure(dude_obj, 2);
            end
            else begin
                LVar1 := random(1, 2);
                if (LVar0 == 1) then begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 117));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 118) + LVar1 + message_str(SCRIPT_RNDDESRT, 119));
                    end
                end
                else begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 120) + LVar0 + message_str(SCRIPT_RNDDESRT, 121));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 122) + LVar0 + message_str(SCRIPT_RNDDESRT, 123) + LVar1 + message_str(SCRIPT_RNDDESRT, 124));
                    end
                end
                critter_injure(dude_obj, 2);
            end
        end
        critter_dmg(dude_obj, LVar1, 0);
        LVar0 := LVar0 * 3600;
        game_time_advance(game_ticks(LVar0));
    end
end

procedure South1
begin
    variable LVar0 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 131));
    Tot_Critter_A := random(6, 10);
    Outer_ring := 7;
    Inner_ring := 10;
    Critter_type := 16777244;
    Critter_script := 941;
    while (Tot_Critter_A) do begin
        Critter_direction := 1;
        call Place_critter();
        anim(Critter, 1000, 4);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
end

procedure South2
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 132));
    Tot_Critter_A := random(4, 6);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_type := 16777227;
    Critter_script := 12;
    group_angle := random(0, 5);
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2 * 2) - 2);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure South3
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6);
    Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
    if (obj_is_carrying_obj_pid(dude_obj, 126)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 125));
        destroy_object(obj_carrying_pid_obj(dude_obj, 126));
    end
    else begin
        if (is_success(Skill_roll)) then begin
            if (LVar0 == 1) then begin
                display_msg(message_str(SCRIPT_RNDDESRT, 109));
            end
            else begin
                display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
            end
        end
        else begin
            if (is_critical(Skill_roll)) then begin
                LVar1 := random(2, 4);
                if (LVar0 == 1) then begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 112) + LVar1 + message_str(SCRIPT_RNDDESRT, 113));
                end
                else begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
                end
                critter_injure(dude_obj, 2);
            end
            else begin
                LVar1 := random(1, 2);
                if (LVar0 == 1) then begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 117));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 118) + LVar1 + message_str(SCRIPT_RNDDESRT, 119));
                    end
                end
                else begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 120) + LVar0 + message_str(SCRIPT_RNDDESRT, 121));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 122) + LVar0 + message_str(SCRIPT_RNDDESRT, 123) + LVar1 + message_str(SCRIPT_RNDDESRT, 124));
                    end
                end
                critter_injure(dude_obj, 2);
            end
        end
        critter_dmg(dude_obj, LVar1, 0);
        LVar0 := LVar0 * 3600;
        game_time_advance(game_ticks(LVar0));
    end
end

procedure South4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 143));
    Tot_Critter_A := random(2, 5);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_script := 749;
    group_angle := random(0, 5);
    while (Tot_Critter_A) do begin
        if (random(0, 1)) then begin
            Critter_type := 16777449;
        end
        else begin
            Critter_type := 16777432;
        end
        Critter_direction := group_angle + (random(0, 1 * 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        if (random(0, 1)) then begin
            if (random(0, 1)) then begin
                Item := create_object(34, 0, 0);
                add_obj_to_inven(Critter, Item);
                if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
                    Item := create_object(34, 0, 0);
                    add_obj_to_inven(Critter, Item);
                end
                Item := create_object(10, 0, 0);
            end
            else begin
                Item := create_object(29, 0, 0);
                add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
                Item := create_object(8, 0, 0);
            end
        end
        else begin
            Item := create_object(7, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        Item := item_caps_adjust(Critter, random(10, 30) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure South5
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 144));
    Tot_Critter_A := random(4, 8);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 7;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Critter_script := 943;
    group_angle := random(0, 5);
    while (Tot_Critter_A) do begin
        if (random(0, 4) == 4) then begin
            Critter_type := 16777226;
        end
        else begin
            Critter_type := 16777378;
        end
        Critter_direction := group_angle + (random(0, 2 * 2) - 2);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, random(0, 5));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure South6
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 145));
    Tot_Critter_A := random(3, 6);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    group_angle := random(0, 5);
    Critter_type := 16777227;
    Critter_script := 12;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2 * 2) - 2);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Shady1
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 146));
    Tot_Critter_A := 2;
    Tot_Critter_B := random(2, 3);
    set_global_var(GVAR_WATER_THIEF_3, 0);
    set_global_var(GVAR_WATER_THIEF_4, 0);
    set_global_var(GVAR_WATER_THIEF_5, 0);
    set_global_var(GVAR_WATER_THIEF_2, Tot_Critter_B);
    set_global_var(GVAR_WATER_THIEF_1, 6);
    group_angle := random(0, 5);
    Outer_ring := 11;
    Inner_ring := 8;
    Critter_type := 16777255;
    Critter_script := 713;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Item := item_caps_adjust(Critter, (random(1, 12) * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    victim := Critter;
    Critter_type := 16777449;
    Critter_script := 749;
    if (group_angle == 0) then begin
        group_angle := 3;
    end
    else begin
        if (group_angle == 1) then begin
            group_angle := 4;
        end
        else begin
            if (group_angle == 2) then begin
                group_angle := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    group_angle := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        group_angle := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            group_angle := 2;
                        end
                    end
                end
            end
        end
    end
    while (Tot_Critter_B) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Item := create_object(7, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := item_caps_adjust(Critter, (random(1, 13) * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1);
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    attack_setup(Critter, victim);
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Shady2
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6);
    Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
    if (obj_is_carrying_obj_pid(dude_obj, 126)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 125));
        destroy_object(obj_carrying_pid_obj(dude_obj, 126));
    end
    else begin
        if (is_success(Skill_roll)) then begin
            if (LVar0 == 1) then begin
                display_msg(message_str(SCRIPT_RNDDESRT, 109));
            end
            else begin
                display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
            end
        end
        else begin
            if (is_critical(Skill_roll)) then begin
                LVar1 := random(2, 4);
                if (LVar0 == 1) then begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 112) + LVar1 + message_str(SCRIPT_RNDDESRT, 113));
                end
                else begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
                end
                critter_injure(dude_obj, 2);
            end
            else begin
                LVar1 := random(1, 2);
                if (LVar0 == 1) then begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 117));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 118) + LVar1 + message_str(SCRIPT_RNDDESRT, 119));
                    end
                    critter_injure(dude_obj, 2);
                end
                else begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 120) + LVar0 + message_str(SCRIPT_RNDDESRT, 121));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 122) + LVar0 + message_str(SCRIPT_RNDDESRT, 123) + LVar1 + message_str(SCRIPT_RNDDESRT, 124));
                    end
                    critter_injure(dude_obj, 2);
                end
            end
        end
        critter_dmg(dude_obj, LVar1, 0);
        LVar0 := LVar0 * 3600;
        game_time_advance(game_ticks(LVar0));
    end
end

procedure Shady3
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 169));
    Scorpions_Killed := 1;
    Tot_Critter_A := random(1, 3);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    Critter_type := 16777227;
    Critter_script := 12;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 4);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Shady4
begin
    if (not(global_var(GVAR_SAVE_TANDI_2))) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 170));
    end
    else begin
        display_msg(message_str(SCRIPT_RNDDESRT, 305));
    end
    Tot_Critter_B := random(4, 6);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 7;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    group_angle := dude_rot;
    set_global_var(GVAR_WATER_THIEF_2, 0);
    if (not(global_var(GVAR_SAVE_TANDI_2))) then begin
        Critter_type := 16777246;
        Critter_script := 243;
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Item := create_object(71, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(29, 0, 0);
        add_mult_objs_to_inven(Critter, Item, 2 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
        Item := create_object(30, 0, 0);
        add_mult_objs_to_inven(Critter, Item, 1 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
        Item := create_object(34, 0, 0);
        add_mult_objs_to_inven(Critter, Item, 2 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
        Item := create_object(40, 0, 0);
        add_mult_objs_to_inven(Critter, Item, random(0, 4));
        Item := create_object(47, 0, 0);
        add_mult_objs_to_inven(Critter, Item, random(0, 1));
        Item := create_object(81, 0, 0);
        add_mult_objs_to_inven(Critter, Item, random(0, 3));
        Item := item_caps_adjust(Critter, random(25, 100) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        victim := Critter;
    end
    else begin
        set_global_var(GVAR_WATER_THIEF_2, 1);
    end
    Critter_type := 16777218;
    Critter_script := 757;
    while (Tot_Critter_B) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (not(global_var(GVAR_SAVE_TANDI_2))) then begin
            if (random(0, 1)) then begin
                Critter_direction := group_angle + (random(0, 4) - 2);
                while (Critter_direction < 0) do begin
                    Critter_direction := Critter_direction + 6;
                end
                if (Critter_direction > 5) then begin
                    Critter_direction := Critter_direction % 6;
                end
                anim(Critter, 1000, Critter_direction);
            end
            else begin
                anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(victim)));
            end
        end
        else begin
            anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        end
        Item := create_object(10, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(34, 0, 0);
        add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
        Item := item_caps_adjust(Critter, random(1, 6) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        Tot_Critter_B := Tot_Critter_B - 1;
    end
end

procedure Shady5
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 171));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    Critter_direction := dude_rot;
    Critter_type := 16777246;
    if (random(0, 1)) then begin
        Critter_type := 16777246;
        Critter_script := 699;
    end
    else begin
        Critter_type := 16777218;
        Critter_script := 749;
    end
    Critter_script := -1;
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(8, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(29, 0, 0);
    add_mult_objs_to_inven(Critter, Item, 1 + has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger));
    Item := create_object(7, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(81, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := item_caps_adjust(Critter, random(8, 44) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
    kill_critter(Critter, 61);
    Tot_Critter_A := random(4, 6);
    if ((game_time_hour >= 700) and (game_time_hour < 1800)) then begin
        Outer_ring := 6;
        Inner_ring := 4;
    end
    else begin
        Outer_ring := 4;
        Inner_ring := 3;
    end
    Critter_type := 16777284;
    Critter_script := 735;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 5);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Shady6
begin
    variable LVar0 := 2;
    display_msg(message_str(SCRIPT_RNDDESRT, 172));
    Critter_direction := random(0, 5);
    money := create_object(41, 0, 0);
    Critter_tile := tile_num_in_direction(Dude_tile, Critter_direction, 4);
    Item := create_object(71, 0, 0);
    critter_attempt_placement(Item, Critter_tile, 0);
    if (get_critter_stat(dude_obj, STAT_lu) == 8) then begin
        money := 0;
        Item := create_object(71, 0, 0);
        critter_attempt_placement(Item, Critter_tile, 0);
        Item := create_object(29, 0, 0);
        critter_attempt_placement(Item, Critter_tile, 0);
        if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
            Item := create_object(29, 0, 0);
            critter_attempt_placement(Item, Critter_tile, 0);
        end
        Item := create_object(46, 0, 0);
        critter_attempt_placement(Item, Critter_tile, 0);
        add_mult_objs_to_inven(Item, money, 6 * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
    end
    else begin
        if (get_critter_stat(dude_obj, STAT_lu) > 8) then begin
            Item := create_object(71, 0, 0);
            critter_attempt_placement(Item, Critter_tile, 0);
            if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
                LVar0 := 4;
            end
            while (LVar0) do begin
                Item := create_object(29, 0, 0);
                critter_attempt_placement(Item, Critter_tile, 0);
                LVar0 := LVar0 - 1;
            end
            Item := create_object(46, 0, 0);
            add_mult_objs_to_inven(Item, money, 122 * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
            critter_attempt_placement(Item, Critter_tile, 0);
            Item := create_object(8, 0, 0);
            critter_attempt_placement(Item, Critter_tile, 0);
        end
        else begin
            Item := create_object(71, 0, 0);
            critter_attempt_placement(Item, Critter_tile, 0);
            Item := create_object(46, 0, 0);
            add_mult_objs_to_inven(Item, money, 4 * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
            critter_attempt_placement(Item, Critter_tile, 0);
        end
    end
end

procedure Raider1
begin
    variable LVar0 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 173));
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Tot_Critter_A := random(5, 7);
    Tot_Critter_B := random(2, 3);
    group_angle := random(0, 5);
    random_seed_1 := Tot_Critter_A;
    random_seed_2 := 0;
    random_seed_3 := 0;
    LVar0 := tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(7, 12));
    Item := create_object(33554959, LVar0, 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 0), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 1), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 2), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 3), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 4), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 5), 0);
    if ((game_time_hour >= 1900) or (game_time_hour < 600)) then begin
        Critter := create_object(33554433, 0, 0);
        Critter_tile := tile_num_in_direction(Dude_tile, group_angle, 5);
        critter_attempt_placement(Critter, Critter_tile, 0);
    end
    Critter_type := 16777244;
    Critter_script := -1;
    Critter_direction := random(0, 5);
    call Place_critter();
    anim(Critter, 1000, random(0, 5));
    kill_critter(Critter, 61);
    Critter_type := 16777244;
    Critter_script := -1;
    Critter_direction := random(0, 5);
    call Place_critter();
    anim(Critter, 1000, random(0, 5));
    kill_critter(Critter, 61);
    Critter_script := 750;
    while (Tot_Critter_A) do begin
        if (random(0, 1)) then begin
            Critter_type := 16777449;
        end
        else begin
            Critter_type := 16777432;
        end
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Item := create_object(4, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (random(0, 1)) then begin
            if (random(0, 1)) then begin
                Item := create_object(34, 0, 0);
                add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
                Item := create_object(10, 0, 0);
            end
            else begin
                Item := create_object(29, 0, 0);
                add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
                Item := create_object(8, 0, 0);
            end
        end
        else begin
            Item := create_object(7, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    victim := Critter;
    if (random(0, 1)) then begin
        Critter_type := 16777449;
    end
    else begin
        Critter_type := 16777432;
    end
    Critter_script := -1;
    Critter_direction := group_angle + (random(0, 2) - 1);
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    call Place_critter();
    if (group_angle == 0) then begin
        Critter_direction := 3;
    end
    else begin
        if (group_angle == 1) then begin
            Critter_direction := 4;
        end
        else begin
            if (group_angle == 2) then begin
                Critter_direction := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    Critter_direction := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        Critter_direction := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            Critter_direction := 2;
                        end
                    end
                end
            end
        end
    end
    if (random(0, 2) == 0) then begin
        Critter_direction := Critter_direction + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
    end
    anim(Critter, 1000, Critter_direction);
    Item := create_object(1, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(4, 0, 0);
    add_obj_to_inven(Critter, Item);
    kill_critter(Critter, 61);
    Critter_type := 16777219;
    Critter_script := 755;
    if (group_angle == 0) then begin
        group_angle := 3;
    end
    else begin
        if (group_angle == 1) then begin
            group_angle := 4;
        end
        else begin
            if (group_angle == 2) then begin
                group_angle := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    group_angle := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        group_angle := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            group_angle := 2;
                        end
                    end
                end
            end
        end
    end
    while (Tot_Critter_B) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Item := create_object(10, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(34, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
            Item := create_object(34, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    attack_setup(victim, Critter);
    Critter_type := 16777219;
    Critter_script := -1;
    Critter_direction := group_angle + (random(0, 2) - 1);
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    call Place_critter();
    if (group_angle == 0) then begin
        Critter_direction := 3;
    end
    else begin
        if (group_angle == 1) then begin
            Critter_direction := 4;
        end
        else begin
            if (group_angle == 2) then begin
                Critter_direction := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    Critter_direction := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        Critter_direction := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            Critter_direction := 2;
                        end
                    end
                end
            end
        end
    end
    if (random(0, 2) == 0) then begin
        Critter_direction := Critter_direction + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
    end
    anim(Critter, 1000, Critter_direction);
    Item := create_object(2, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(10, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(34, 0, 0);
    add_obj_to_inven(Critter, Item);
    kill_critter(Critter, 61);
    Critter_type := 16777229;
    Critter_script := 753;
    Critter_direction := random(0, 5);
    call Place_critter();
    critter_dmg(Critter, 5, 0);
    Item := item_caps_adjust(Critter, random(100, 300) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
    if (random(1, 10) > 6) then begin
        Item := create_object(47, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    if (random(1, 10) > 6) then begin
        Item := create_object(40, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    if (random(1, 10) > 6) then begin
        Item := create_object(78, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    if (random(1, 10) > 6) then begin
        Item := create_object(84, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Raider2
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6);
    if (obj_is_carrying_obj_pid(dude_obj, 126)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 125));
        destroy_object(obj_carrying_pid_obj(dude_obj, 126));
    end
    else begin
        Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
        if (is_success(Skill_roll)) then begin
            if (LVar0 == 1) then begin
                display_msg(message_str(SCRIPT_RNDDESRT, 109));
            end
            else begin
                display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
            end
        end
        else begin
            if (is_critical(Skill_roll)) then begin
                LVar1 := random(2, 4);
                if (LVar0 == 1) then begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 112) + LVar1 + message_str(SCRIPT_RNDDESRT, 113));
                end
                else begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
                end
                critter_injure(dude_obj, 2);
            end
            else begin
                LVar1 := random(1, 2);
                if (LVar0 == 1) then begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 117));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 118) + LVar1 + message_str(SCRIPT_RNDDESRT, 119));
                    end
                    critter_injure(dude_obj, 2);
                end
                else begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 120) + LVar0 + message_str(SCRIPT_RNDDESRT, 121));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 122) + LVar0 + message_str(SCRIPT_RNDDESRT, 123) + LVar1 + message_str(SCRIPT_RNDDESRT, 124));
                    end
                    critter_injure(dude_obj, 2);
                end
            end
        end
        critter_dmg(dude_obj, LVar1, 0);
        LVar0 := LVar0 * 3600;
        game_time_advance(game_ticks(LVar0));
    end
end

procedure Raider3
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 196));
    Tot_Critter_A := random(3, 4);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_type := 16777227;
    Critter_script := 12;
    while (Tot_Critter_A) do begin
        Critter_direction := random(4, 5);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Raider4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 197));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 3;
    Tot_Critter_A := random(4, 6);
    group_angle := random(0, 5);
    Critter_script := 749;
    while (Tot_Critter_A) do begin
        if (random(0, 1)) then begin
            if (random(0, 1)) then begin
                Critter_type := 16777449;
            end
            else begin
                Critter_type := 16777432;
            end
        end
        else begin
            Critter_type := 16777319;
        end
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Item := create_object(4, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (random(0, 1)) then begin
            if (random(0, 1)) then begin
                Item := create_object(10, 0, 0);
            end
            else begin
                Item := create_object(18, 0, 0);
            end
        end
        else begin
            Item := create_object(8, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        if (random(0, 1)) then begin
            Item := create_object(124, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Raider5
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 198));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_direction := dude_rot;
    Critter_type := 16777254;
    Critter_script := 700;
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(4, 0, 0);
    add_obj_to_inven(Critter, Item);
    if (random(0, 1)) then begin
        if (random(0, 1)) then begin
            Item := create_object(10, 0, 0);
        end
        else begin
            Item := create_object(18, 0, 0);
        end
    end
    else begin
        Item := create_object(8, 0, 0);
    end
    add_obj_to_inven(Critter, Item);
    if (random(0, 1)) then begin
        Item := item_caps_adjust(Critter, random(5, 10) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
    end
end

procedure Raider6
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 199));
    Tot_Critter_A := random(3, 5);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_script := -1;
    while (Tot_Critter_A) do begin
        if (random(0, 1)) then begin
            if (random(0, 1)) then begin
                Critter_type := 16777449;
            end
            else begin
                Critter_type := 16777432;
            end
        end
        else begin
            Critter_type := 16777319;
        end
        Critter_direction := random(0, 5);
        call Place_critter();
        anim(Critter, 1000, random(0, 5));
        kill_critter(Critter, 61);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777252;
    Critter_direction := random(0, 5);
    call Place_critter();
    anim(Critter, 1000, random(0, 5));
    kill_critter(Critter, 61);
end

procedure Junk1
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 200));
    Tot_Critter_A := random(3, 4);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_type := 16777227;
    Critter_script := 12;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 4);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Junk2
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6);
    if (obj_is_carrying_obj_pid(dude_obj, 126)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 125));
        destroy_object(obj_carrying_pid_obj(dude_obj, 126));
    end
    else begin
        Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
        if (is_success(Skill_roll)) then begin
            if (LVar0 == 1) then begin
                display_msg(message_str(SCRIPT_RNDDESRT, 109));
            end
            else begin
                display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
            end
        end
        else begin
            if (is_critical(Skill_roll)) then begin
                LVar1 := random(2, 4);
                if (LVar0 == 1) then begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 112) + LVar1 + message_str(SCRIPT_RNDDESRT, 113));
                end
                else begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
                end
                critter_injure(dude_obj, 2);
            end
            else begin
                LVar1 := random(1, 2);
                if (LVar0 == 1) then begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 117));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 118) + LVar1 + message_str(SCRIPT_RNDDESRT, 119));
                    end
                    critter_injure(dude_obj, 2);
                end
                else begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 120) + LVar0 + message_str(SCRIPT_RNDDESRT, 121));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 122) + LVar0 + message_str(SCRIPT_RNDDESRT, 123) + LVar1 + message_str(SCRIPT_RNDDESRT, 124));
                    end
                    critter_injure(dude_obj, 2);
                end
            end
        end
        critter_dmg(dude_obj, LVar1, 0);
        LVar0 := LVar0 * 3600;
        game_time_advance(game_ticks(LVar0));
    end
end

procedure Junk3
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 223));
    Tot_Critter_A := random(4, 6);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    group_angle := random(0, 5);
    Critter_type := 16777379;
    Critter_script := 693;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, random(0, 5));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Junk4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 224));
    Tot_Critter_A := random(2, 4);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_type := 16777452;
    Critter_script := 437;
    group_angle := random(0, 5);
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (random(1, 3) == 1) then begin
            anim(Critter, 1000, random(0, 5));
        end
        else begin
            anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        end
        Item := create_object(4, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (random(0, 1)) then begin
            Item := create_object(10, 0, 0);
            add_obj_to_inven(Critter, Item);
            Item := create_object(34, 0, 0);
            add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
        end
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Item := create_object(100, 0, 0);
    add_obj_to_inven(Critter, Item);
end

procedure Junk5
begin
    variable LVar0 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 225));
    Tot_Critter_A := random(1, 3);
    Tot_Critter_B := random(2, 12);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    group_angle := random(0, 5);
    LVar0 := tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(7, 12));
    Item := create_object(33554959, LVar0, 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 0), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 1), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 2), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 3), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 4), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 5), 0);
    LVar0 := tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(7, 12));
    Item := create_object(33554960, LVar0, 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 0), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 1), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 2), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 3), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 4), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 5), 0);
    Critter_type := 16777245;
    Critter_script := 752;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, random(0, 5));
        Item := item_caps_adjust(Critter, random(50, 150) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        Item := create_object(30, 0, 0);
        add_mult_objs_to_inven(Critter, Item, random(1, 4));
        Item := create_object(29, 0, 0);
        add_mult_objs_to_inven(Critter, Item, random(1, 4));
        Item := create_object(4, 0, 0);
        add_mult_objs_to_inven(Critter, Item, random(1, 4));
        Item := create_object(71, 0, 0);
        add_mult_objs_to_inven(Critter, Item, random(4, 8));
        Item := create_object(127, 0, 0);
        add_mult_objs_to_inven(Critter, Item, random(0, 2));
        Item := create_object(93, 0, 0);
        add_mult_objs_to_inven(Critter, Item, random(0, 2));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777243;
    for (Critter_script := 755; Tot_Critter_B; Tot_Critter_B := Tot_Critter_B - 1) begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, random(0, 5));
        Item := create_object(4, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (random(0, 1)) then begin
            Item := create_object(18, 0, 0);
            add_obj_to_inven(Critter, Item);
            Item := create_object(31, 0, 0);
            add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
            continue;
        end
        Item := create_object(10, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(34, 0, 0);
        add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
    end
end

procedure Junk6
begin
    variable LVar0 := 2;
    variable LVar1 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 172));
    LVar1 := create_object(41, 0, 0);
    Critter_direction := random(0, 5);
    Critter_tile := tile_num_in_direction(Dude_tile, Critter_direction, 4);
    if (get_critter_stat(dude_obj, STAT_lu) < 3) then begin
        Item := create_object(71, 0, 0);
        critter_attempt_placement(Item, Critter_tile, 0);
    end
    else begin
        if (get_critter_stat(dude_obj, STAT_lu) == 8) then begin
            Item := create_object(71, 0, 0);
            critter_attempt_placement(Item, Critter_tile, 0);
            Item := create_object(29, 0, 0);
            critter_attempt_placement(Item, Critter_tile, 0);
            if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
                Item := create_object(29, 0, 0);
                critter_attempt_placement(Item, Critter_tile, 0);
            end
            Item := create_object(46, 0, 0);
            critter_attempt_placement(Item, Critter_tile, 0);
            add_mult_objs_to_inven(Item, LVar1, 6 * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        end
        else begin
            if (get_critter_stat(dude_obj, STAT_lu) > 8) then begin
                Item := create_object(71, 0, 0);
                critter_attempt_placement(Item, Critter_tile, 0);
                if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
                    LVar0 := 4;
                end
                while (LVar0) do begin
                    Item := create_object(29, 0, 0);
                    critter_attempt_placement(Item, Critter_tile, 0);
                    LVar0 := LVar0 - 1;
                end
                Item := create_object(46, 0, 0);
                add_mult_objs_to_inven(Item, LVar1, 122 * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
                critter_attempt_placement(Item, Critter_tile, 0);
                Item := create_object(8, 0, 0);
                critter_attempt_placement(Item, Critter_tile, 0);
            end
            else begin
                Item := create_object(71, 0, 0);
                critter_attempt_placement(Item, Critter_tile, 0);
                Item := create_object(46, 0, 0);
                add_mult_objs_to_inven(Item, LVar1, 4 * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
                critter_attempt_placement(Item, Critter_tile, 0);
            end
        end
    end
end

procedure Hub1
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6) + 2;
    if (obj_is_carrying_obj_pid(dude_obj, 126)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 125));
        destroy_object(obj_carrying_pid_obj(dude_obj, 126));
    end
    else begin
        Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
        if (is_success(Skill_roll)) then begin
            display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
        end
        else begin
            if (is_critical(Skill_roll)) then begin
                LVar1 := random(2, 4);
            end
            else begin
                LVar1 := random(2, 3);
            end
            display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
            critter_injure(dude_obj, 2);
        end
        critter_dmg(dude_obj, LVar1, 0);
        LVar0 := LVar0 * 3600;
        game_time_advance(game_ticks(LVar0));
    end
end

procedure Hub2
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 133));
    Tot_Critter_A := random(3, 6);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_script := 749;
    while (Tot_Critter_A) do begin
        if (random(0, 1)) then begin
            if (random(0, 1)) then begin
                Critter_type := 16777254;
            end
            else begin
                Critter_type := 16777235;
            end
        end
        else begin
            Critter_type := 16777243;
        end
        Critter_direction := random(3, 5);
        call Place_critter();
        anim(Critter, 1000, random(0, 2));
        Item := create_object(4, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (random(0, 1)) then begin
            if (random(0, 1)) then begin
                Item := create_object(9, 0, 0);
            end
            else begin
                Item := create_object(10, 0, 0);
            end
        end
        else begin
            Item := create_object(8, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        Item := item_caps_adjust(Critter, random(10, 30) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        if (random(0, 3) == 3) then begin
            Item := create_object(40, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        if (random(0, 3) == 3) then begin
            Item := create_object(87, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        if (random(0, 3) == 3) then begin
            Item := create_object(81, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        if (random(0, 3) == 3) then begin
            Item := create_object(103, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Hub3
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 134));
    Tot_Critter_A := random(2, 3);
    Tot_Critter_B := random(1, 2);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_type := 16777227;
    Critter_script := 12;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 4);
        call Place_critter();
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777382;
    while (Tot_Critter_B) do begin
        Critter_direction := random(0, 4);
        call Place_critter();
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Hub4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 135));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    Tot_Critter_A := random(4, 6);
    Critter_script := 573;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 2);
        if (random(0, 1)) then begin
            Critter_type := 16777243;
        end
        else begin
            Critter_type := 16777253;
        end
        call Place_critter();
        anim(Critter, 1000, random(3, 5));
        Item := item_caps_adjust(Critter, random(20, 50) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        if (random(0, 1)) then begin
            Item := create_object(9, 0, 0);
        end
        else begin
            Item := create_object(18, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
end

procedure Hub5
begin
    variable LVar0 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 136));
    LVar0 := tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(7, 9));
    Item := create_object(33554959, LVar0, 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 0), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 1), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 2), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 3), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 4), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 5), 0);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    Tot_Critter_A := random(5, 8);
    Critter_script := 755;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 2);
        if (random(0, 1)) then begin
            Critter_type := 16777243;
        end
        else begin
            Critter_type := 16777253;
        end
        call Place_critter();
        anim(Critter, 1000, random(3, 5));
        Item := item_caps_adjust(Critter, random(20, 50) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        if (random(0, 1)) then begin
            Item := create_object(9, 0, 0);
        end
        else begin
            Item := create_object(18, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Critter_type := 16777229;
    Critter_script := 752;
    call Place_critter();
    Item := item_caps_adjust(Critter, random(100, 300) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
    Item := create_object(71, 0, 0);
    add_mult_objs_to_inven(Critter, Item, random(0, 4));
    Item := create_object(81, 0, 0);
    add_mult_objs_to_inven(Critter, Item, random(0, 4));
    Item := create_object(40, 0, 0);
    add_mult_objs_to_inven(Critter, Item, random(0, 2));
    Item := create_object(47, 0, 0);
    add_mult_objs_to_inven(Critter, Item, random(0, 1));
    Item := create_object(29, 0, 0);
    add_mult_objs_to_inven(Critter, Item, random(0, 3));
    Item := create_object(30, 0, 0);
    add_mult_objs_to_inven(Critter, Item, random(0, 3));
    Item := create_object(35, 0, 0);
    add_mult_objs_to_inven(Critter, Item, random(0, 2));
    Item := create_object(36, 0, 0);
    add_mult_objs_to_inven(Critter, Item, random(0, 2));
end

procedure Hub6
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 137));
    Tot_Critter_A := random(2, 4);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    Critter_type := 16777244;
    Critter_script := 34;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 5);
        call Place_critter();
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777386;
    Critter_script := -1;
    call Place_critter();
end

procedure Necrop1
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6);
    if (obj_is_carrying_obj_pid(dude_obj, 126)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 125));
        destroy_object(obj_carrying_pid_obj(dude_obj, 126));
    end
    else begin
        Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
        if (is_success(Skill_roll)) then begin
            if (LVar0 == 1) then begin
                display_msg(message_str(SCRIPT_RNDDESRT, 109));
            end
            else begin
                display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
            end
        end
        else begin
            if (is_critical(Skill_roll)) then begin
                LVar1 := random(2, 4);
                if (LVar0 == 1) then begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 112) + LVar1 + message_str(SCRIPT_RNDDESRT, 113));
                end
                else begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
                end
                critter_injure(dude_obj, 2);
            end
            else begin
                LVar1 := random(1, 2);
                if (LVar0 == 1) then begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 117));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 118) + LVar1 + message_str(SCRIPT_RNDDESRT, 119));
                    end
                    critter_injure(dude_obj, 2);
                end
                else begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 120) + LVar0 + message_str(SCRIPT_RNDDESRT, 121));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 122) + LVar0 + message_str(SCRIPT_RNDDESRT, 123) + LVar1 + message_str(SCRIPT_RNDDESRT, 124));
                    end
                    critter_injure(dude_obj, 2);
                end
            end
        end
        critter_dmg(dude_obj, LVar1, 0);
        LVar0 := LVar0 * 3600;
        game_time_advance(game_ticks(LVar0));
    end
end

procedure Necrop2
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 126));
    Tot_Critter_A := random(2, 4);
    Tot_Critter_B := random(2, 4);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    group_angle := random(0, 5);
    Critter_script := 12;
    Dude_tile := Dude_tile + (200 * (random(0, 4) - 2));
    while (Tot_Critter_A) do begin
        if (random(0, 3) == 3) then begin
            Critter_type := 16777382;
        end
        else begin
            Critter_type := 16777227;
        end
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    victim := Critter;
    Critter_script := 222;
    if (group_angle == 0) then begin
        group_angle := 3;
    end
    else begin
        if (group_angle == 1) then begin
            group_angle := 4;
        end
        else begin
            if (group_angle == 2) then begin
                group_angle := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    group_angle := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        group_angle := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            group_angle := 2;
                        end
                    end
                end
            end
        end
    end
    while (Tot_Critter_B) do begin
        if (random(0, 2) == 2) then begin
            Critter_type := 16777226;
        end
        else begin
            Critter_type := 16777378;
        end
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    attack_setup(Critter, victim);
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Necrop3
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 127));
    Tot_Critter_A := random(2, 4);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 4;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
    group_angle := random(0, 5);
    Critter_type := 16777230;
    Critter_script := 953;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Necrop4
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    variable LVar2 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 128));
    Item := create_object(33554653, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(5, 8)), 0);
    Item := create_object(33554654, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(5, 8)), 0);
    Item := create_object(33554747, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(5, 8)), 0);
    if (random(0, 3) == 3) then begin
        LVar1 := tile_num_in_direction(tile_num(dude_obj), random(0, 5), random(0, 5));
        LVar2 := random(0, 4);
        if (LVar2 == 0) then begin
            LVar0 := create_object(29, LVar1, 0);
        end
        else begin
            if (LVar2 == 1) then begin
                LVar0 := create_object(30, LVar1, 0);
            end
            else begin
                if (LVar2 == 2) then begin
                    LVar0 := create_object(34, LVar1, 0);
                end
                else begin
                    if (LVar2 == 3) then begin
                        LVar0 := create_object(31, LVar1, 0);
                    end
                    else begin
                        if (LVar2 == 4) then begin
                            LVar0 := create_object(111, LVar1, 0);
                        end
                    end
                end
            end
        end
    end
    LVar1 := tile_num_in_direction(tile_num(dude_obj), random(0, 5), random(3, 5));
    LVar0 := create_object(33554541, LVar1, 0);
    LVar1 := tile_num_in_direction(tile_num(dude_obj), random(0, 5), random(3, 5));
    LVar0 := create_object(33554437, LVar1, 0);
    LVar1 := tile_num_in_direction(tile_num(dude_obj), random(0, 5), random(3, 5));
    LVar0 := create_object(33554524, LVar1, 0);
end

procedure Necrop5
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 127));
    Tot_Critter_A := random(1, 3);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 4;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
    group_angle := random(0, 5);
    Critter_type := 16777230;
    Critter_script := 953;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Necrop6
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 130));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 4;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
    if (random(0, 1)) then begin
        Critter_type := 16777254;
    end
    else begin
        Critter_type := 16777253;
    end
    Critter_script := -1;
    Critter_direction := random(0, 5);
    call Place_critter();
    anim(Critter, 1000, random(0, 5));
    if (random(0, 3) == 3) then begin
        LVar1 := create_object(40, 0, 0);
        add_obj_to_inven(LVar0, LVar1);
    end
    if (random(0, 3) == 3) then begin
        LVar1 := item_caps_adjust(LVar0, random(50, 100) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
    end
    if (random(0, 3) == 3) then begin
        LVar1 := create_object(90, 0, 0);
        add_obj_to_inven(LVar0, LVar1);
    end
    if (random(0, 3) == 3) then begin
        LVar1 := create_object(10, 0, 0);
        add_obj_to_inven(LVar0, LVar1);
    end
    if (random(0, 3) == 3) then begin
        LVar1 := create_object(8, 0, 0);
        add_obj_to_inven(LVar0, LVar1);
    end
    if (random(0, 3) == 3) then begin
        LVar1 := create_object(1, 0, 0);
        add_obj_to_inven(LVar0, LVar1);
    end
    if (random(0, 3) == 3) then begin
        LVar1 := create_object(127, 0, 0);
        add_obj_to_inven(LVar0, LVar1);
    end
    if (random(0, 3) == 3) then begin
        LVar1 := create_object(51, 0, 0);
        add_obj_to_inven(LVar0, LVar1);
    end
    LVar1 := create_object(106, 0, 0);
    add_obj_to_inven(LVar0, LVar1);
    LVar1 := item_caps_adjust(LVar0, random(3, 9) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
    kill_critter(Critter, 61);
end

procedure Steel1
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 226));
    Tot_Critter_A := 2;
    Tot_Critter_B := 6;
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 8;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 4;
    group_angle := random(0, 5);
    random_seed_1 := 0;
    Critter_script := 759;
    if (random(0, 1)) then begin
        Critter_type := 16777491;
    end
    else begin
        Critter_type := 16777494;
    end
    Critter_direction := group_angle + (random(0, 2) - 1);
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    call Place_critter();
    if (group_angle == 0) then begin
        Critter_direction := 3;
    end
    else begin
        if (group_angle == 1) then begin
            Critter_direction := 4;
        end
        else begin
            if (group_angle == 2) then begin
                Critter_direction := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    Critter_direction := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        Critter_direction := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            Critter_direction := 2;
                        end
                    end
                end
            end
        end
    end
    if (random(0, 2) == 0) then begin
        Critter_direction := Critter_direction + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
    end
    anim(Critter, 1000, Critter_direction);
    Item := create_object(28, 0, 0);
    add_obj_to_inven(Critter, Item);
    victim := Critter;
    Critter_script := 758;
    while (Tot_Critter_A) do begin
        if (random(0, 1)) then begin
            Critter_type := 16777490;
        end
        else begin
            Critter_type := 16777493;
        end
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Item := create_object(12, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (random(1, 3) == 1) then begin
            Item := create_object(13, 0, 0);
            add_obj_to_inven(Critter, Item);
            Item := create_object(37, 0, 0);
            add_mult_objs_to_inven(Critter, Item, random(1, 3));
        end
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777403;
    Critter_script := 850;
    if (group_angle == 0) then begin
        group_angle := 3;
    end
    else begin
        if (group_angle == 1) then begin
            group_angle := 4;
        end
        else begin
            if (group_angle == 2) then begin
                group_angle := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    group_angle := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        group_angle := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            group_angle := 2;
                        end
                    end
                end
            end
        end
    end
    while (Tot_Critter_B) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        if (random(1, 3) == 1) then begin
            Item := create_object(11, 0, 0);
        end
        else begin
            Item := create_object(12, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        if (random(1, 2) == 1) then begin
            Item := create_object(13, 0, 0);
            add_obj_to_inven(Critter, Item);
            Item := create_object(37, 0, 0);
            add_mult_objs_to_inven(Critter, Item, random(1, 3));
        end
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    attack_setup(victim, Critter);
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Steel2
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 227));
    Tot_Critter_A := random(6, 10);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 7;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 3;
    Critter_type := 16777227;
    for (Critter_script := 12; Tot_Critter_A; Tot_Critter_A := Tot_Critter_A - 1) begin
        Critter_direction := random(3, 5);
        call Place_critter();
        if (random(1, 3) == 1) then begin
            anim(Critter, 1000, random(0, 5));
            continue;
        end
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Steel3
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6);
    if (obj_is_carrying_obj_pid(dude_obj, 126)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 125));
        destroy_object(obj_carrying_pid_obj(dude_obj, 126));
    end
    else begin
        Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
        if (is_success(Skill_roll)) then begin
            if (LVar0 == 1) then begin
                display_msg(message_str(SCRIPT_RNDDESRT, 109));
            end
            else begin
                display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
            end
        end
        else begin
            if (is_critical(Skill_roll)) then begin
                LVar1 := random(2, 4);
                if (LVar0 == 1) then begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 112) + LVar1 + message_str(SCRIPT_RNDDESRT, 113));
                end
                else begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
                end
                critter_injure(dude_obj, 2);
            end
            else begin
                LVar1 := random(1, 2);
                if (LVar0 == 1) then begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 117));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 118) + LVar1 + message_str(SCRIPT_RNDDESRT, 119));
                    end
                end
                else begin
                    if (LVar1 == 1) then begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 120) + LVar0 + message_str(SCRIPT_RNDDESRT, 121));
                    end
                    else begin
                        display_msg(message_str(SCRIPT_RNDDESRT, 122) + LVar0 + message_str(SCRIPT_RNDDESRT, 123) + LVar1 + message_str(SCRIPT_RNDDESRT, 124));
                    end
                    critter_injure(dude_obj, 2);
                end
            end
        end
        critter_dmg(dude_obj, LVar1, 0);
        LVar0 := LVar0 * 3600;
        game_time_advance(game_ticks(LVar0));
    end
end

procedure Steel4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 250));
    Tot_Critter_A := random(5, 7);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 4;
    group_angle := dude_rot;
    random_seed_1 := 0;
    if (random(0, 1)) then begin
        Critter_type := 16777491;
    end
    else begin
        Critter_type := 16777494;
    end
    Critter_script := 759;
    Critter_direction := group_angle + (random(0, 2) - 1);
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    call Place_critter();
    if (group_angle == 0) then begin
        Critter_direction := 3;
    end
    else begin
        if (group_angle == 1) then begin
            Critter_direction := 4;
        end
        else begin
            if (group_angle == 2) then begin
                Critter_direction := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    Critter_direction := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        Critter_direction := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            Critter_direction := 2;
                        end
                    end
                end
            end
        end
    end
    if (random(0, 2) == 0) then begin
        Critter_direction := Critter_direction + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
    end
    anim(Critter, 1000, Critter_direction);
    Item := create_object(28, 0, 0);
    add_obj_to_inven(Critter, Item);
    Critter_script := 758;
    while (Tot_Critter_A) do begin
        if (random(0, 1)) then begin
            Critter_type := 16777490;
        end
        else begin
            Critter_type := 16777493;
        end
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        if (random(1, 3) == 1) then begin
            Item := create_object(32, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        Item := create_object(12, 0, 0);
        add_obj_to_inven(Critter, Item);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
end

procedure Steel5
begin
    variable LVar0 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 251));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    LVar0 := tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(7, 12));
    Item := create_object(33554959, LVar0, 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 0), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 1), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 2), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 3), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 4), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 5), 0);
    LVar0 := tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(7, 12));
    Item := create_object(33554960, LVar0, 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 0), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 1), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 2), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 3), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 4), 0);
    Item := create_object(33554499, tile_num_in_direction(LVar0, 1, 5), 0);
    if ((game_time_hour >= 1900) or (game_time_hour < 600)) then begin
        Critter := create_object(33554433, 0, 0);
        Critter_tile := tile_num_in_direction(Dude_tile, random(0, 5), 5);
        critter_attempt_placement(Critter, Critter_tile, 0);
        Critter := create_object(33554433, 0, 0);
        Critter_tile := tile_num_in_direction(Dude_tile, random(0, 5), 5);
        critter_attempt_placement(Critter, Critter_tile, 0);
    end
    Tot_Critter_A := random(1, 2);
    while (Tot_Critter_A) do begin
        Critter_type := 16777244;
        Critter_script := 34;
        Critter_direction := random(0, 5);
        call Place_critter();
        anim(Critter, 1000, random(0, 5));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Tot_Critter_A := random(2, 4);
    Critter_type := 16777245;
    Critter_script := 752;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 5);
        call Place_critter();
        anim(Critter, 1000, random(0, 5));
        if (random(0, 1)) then begin
            Item := create_object(71, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        if (random(0, 1)) then begin
            Item := create_object(29, 0, 0);
            add_mult_objs_to_inven(Critter, Item, 2 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
        end
        if (random(0, 1)) then begin
            Item := create_object(30, 0, 0);
            add_mult_objs_to_inven(Critter, Item, 1 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
        end
        if (random(0, 1)) then begin
            Item := create_object(34, 0, 0);
            add_mult_objs_to_inven(Critter, Item, 2 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
        end
        if (random(0, 1)) then begin
            Item := create_object(40, 0, 0);
            add_mult_objs_to_inven(Critter, Item, random(0, 4));
        end
        if (random(0, 1)) then begin
            Item := create_object(47, 0, 0);
            add_mult_objs_to_inven(Critter, Item, random(0, 1));
        end
        if (random(0, 1)) then begin
            Item := create_object(81, 0, 0);
            add_mult_objs_to_inven(Critter, Item, random(0, 3));
        end
        Item := item_caps_adjust(Critter, random(12, 32) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Tot_Critter_B := random(6, 8);
    Critter_script := 755;
    while (Tot_Critter_B) do begin
        Critter_direction := random(0, 5);
        if (random(0, 1)) then begin
            Critter_type := 16777243;
        end
        else begin
            Critter_type := 16777238;
        end
        call Place_critter();
        anim(Critter, 1000, random(0, 5));
        Item := item_caps_adjust(Critter, random(1, 15) * (has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder) + 1));
        if (random(0, 1)) then begin
            Item := create_object(95, 0, 0);
            add_obj_to_inven(Critter, Item);
            if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
                Item := create_object(95, 0, 0);
                add_obj_to_inven(Critter, Item);
            end
            Item := create_object(94, 0, 0);
        end
        else begin
            Item := create_object(34, 0, 0);
            add_obj_to_inven(Critter, Item);
            if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
                Item := create_object(34, 0, 0);
                add_obj_to_inven(Critter, Item);
            end
            Item := create_object(10, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        if (random(0, 1)) then begin
            if (random(0, 2) == 0) then begin
                Item := create_object(125, 0, 0);
            end
            else begin
                Item := create_object(124, 0, 0);
            end
            add_obj_to_inven(Critter, Item);
        end
        Tot_Critter_B := Tot_Critter_B - 1;
    end
end

procedure Steel6
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 252));
    Tot_Critter_A := random(3, 4);
    Tot_Critter_B := random(12, 15);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 7;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 4;
    group_angle := random(0, 5);
    random_seed_1 := 0;
    Critter_script := 759;
    if (random(0, 1)) then begin
        Critter_type := 16777491;
    end
    else begin
        Critter_type := 16777494;
    end
    Critter_direction := group_angle + (random(0, 2) - 1);
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    call Place_critter();
    if (group_angle == 0) then begin
        Critter_direction := 3;
    end
    else begin
        if (group_angle == 1) then begin
            Critter_direction := 4;
        end
        else begin
            if (group_angle == 2) then begin
                Critter_direction := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    Critter_direction := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        Critter_direction := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            Critter_direction := 2;
                        end
                    end
                end
            end
        end
    end
    if (random(0, 2) == 0) then begin
        Critter_direction := Critter_direction + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
    end
    anim(Critter, 1000, Critter_direction);
    Item := create_object(28, 0, 0);
    add_obj_to_inven(Critter, Item);
    for (Critter_script := 758; Tot_Critter_A; Tot_Critter_A := Tot_Critter_A - 1) begin
        if (random(0, 1)) then begin
            Critter_type := 16777490;
        end
        else begin
            Critter_type := 16777493;
        end
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        if (random(0, 3) == 1) then begin
            Item := create_object(13, 0, 0);
            add_obj_to_inven(Critter, Item);
            Item := create_object(37, 0, 0);
            add_mult_objs_to_inven(Critter, Item, random(1, 3));
            continue;
        end
        Item := create_object(12, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    victim := Critter;
    Critter_type := 16777254;
    Critter_script := 749;
    if (group_angle == 0) then begin
        group_angle := 3;
    end
    else begin
        if (group_angle == 1) then begin
            group_angle := 4;
        end
        else begin
            if (group_angle == 2) then begin
                group_angle := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    group_angle := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        group_angle := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            group_angle := 2;
                        end
                    end
                end
            end
        end
    end
    while (Tot_Critter_B) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Item := create_object(7, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (random(0, 2)) then begin
            Item := create_object(30, 0, 0);
            add_obj_to_inven(Critter, Item);
            if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
                Item := create_object(30, 0, 0);
                add_obj_to_inven(Critter, Item);
            end
            Item := create_object(8, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        if (random(0, 1)) then begin
            Item := create_object(40, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    attack_setup(Critter, victim);
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Vats1
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 253));
    radiation_inc(dude_obj, random(15, 30));
    Tot_Critter_A := random(3, 4);
    Tot_Critter_B := 1;
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 3;
    Critter_type := 16777403;
    Critter_script := 850;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        if (random(0, 1) == 1) then begin
            if (random(0, 3) == 0) then begin
                Item := create_object(11, 0, 0);
            end
            else begin
                Item := create_object(12, 0, 0);
            end
        end
        else begin
            Item := create_object(234, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777241;
    Critter_script := 854;
    while (Tot_Critter_B) do begin
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Item := create_object(12, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(35, 0, 0);
        add_obj_to_inven(Critter, Item);
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Vats2
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 254));
    if (random(0, 1)) then begin
        Critter_type := 16777259;
        Critter_script := 953;
    end
    else begin
        Critter_type := 16777261;
        Critter_script := 953;
    end
    Tot_Critter_A := random(3, 5);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Vats3
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 306));
    Tot_Critter_A := random(1, 2);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 4;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
    Critter_type := 16777261;
    Critter_script := 953;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777259;
    Critter_script := 953;
    Tot_Critter_A := 1;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    Tot_Critter_A := random(2, 3);
    Critter_type := 16777403;
    Critter_script := 850;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777241;
    Critter_script := 854;
    Critter_direction := random(0, 2);
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(118, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(38, 0, 0);
    add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 2);
    if (not(obj_is_carrying_obj_pid(dude_obj, 100))) then begin
        Item := create_object(100, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Vats4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 256));
    Tot_Critter_A := random(3, 4);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 7;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Critter_type := 16777403;
    Critter_script := 850;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, random(3, 4));
        if (random(0, 1) == 1) then begin
            if (random(0, 1) == 1) then begin
                Item := create_object(11, 0, 0);
            end
            else begin
                Item := create_object(12, 0, 0);
            end
        end
        else begin
            Item := create_object(234, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777241;
    Critter_script := 854;
    Tot_Critter_B := 1;
    while (Tot_Critter_B) do begin
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, random(3, 4));
        Item := create_object(12, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(35, 0, 0);
        add_obj_to_inven(Critter, Item);
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 3;
    Critter_type := 16777261;
    Critter_script := 953;
    Critter_direction := random(0, 2);
    call Place_critter();
    anim(Critter, 1000, random(3, 4));
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Vats5
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6);
    Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
    if (is_success(Skill_roll)) then begin
        if (LVar0 == 1) then begin
            display_msg(message_str(SCRIPT_RNDDESRT, 109));
        end
        else begin
            display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
        end
    end
    else begin
        if (is_critical(Skill_roll)) then begin
            LVar1 := random(2, 4);
            if (LVar0 == 1) then begin
                display_msg(message_str(SCRIPT_RNDDESRT, 112) + LVar1 + message_str(SCRIPT_RNDDESRT, 113));
            end
            else begin
                display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
            end
            critter_injure(dude_obj, 2);
        end
        else begin
            LVar1 := random(1, 2);
            if (LVar0 == 1) then begin
                if (LVar1 == 1) then begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 117));
                end
                else begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 118) + LVar1 + message_str(SCRIPT_RNDDESRT, 119));
                end
                critter_injure(dude_obj, 2);
            end
            else begin
                if (LVar1 == 1) then begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 120) + LVar0 + message_str(SCRIPT_RNDDESRT, 121));
                end
                else begin
                    display_msg(message_str(SCRIPT_RNDDESRT, 122) + LVar0 + message_str(SCRIPT_RNDDESRT, 123) + LVar1 + message_str(SCRIPT_RNDDESRT, 124));
                end
                critter_injure(dude_obj, 2);
            end
        end
    end
    LVar0 := LVar0 * 3600;
    game_time_advance(game_ticks(LVar0));
end

procedure Vats6
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 279));
    Item := create_object(33554804, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(8, 10)), 0);
    Item := create_object(33554653, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(5, 9)), 0);
    Item := create_object(33554654, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(5, 9)), 0);
    Item := create_object(33554747, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(5, 9)), 0);
    Item := create_object(33555207, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(5, 9)), 0);
    if ((game_time_hour >= 1900) or (game_time_hour < 600)) then begin
        Item := create_object(33554433, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(8, 10)), 0);
        if (random(0, 1)) then begin
            Item := create_object(33554433, tile_num_in_direction(Dude_tile + random(0, 8) - 4, random(0, 5), random(8, 10)), 0);
        end
    end
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 3;
    group_angle := random(0, 5);
    Critter_type := 16777403;
    Critter_script := 850;
    Tot_Critter_A := random(2, 3);
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777241;
    Critter_script := 854;
    Critter_direction := random(0, 2);
    Critter_direction := group_angle + (random(0, 2) - 1);
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(12, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(35, 0, 0);
    add_obj_to_inven(Critter, Item);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 3;
    Critter_type := 16777261;
    Critter_script := 953;
    Tot_Critter_A := 2;
    if (group_angle == 0) then begin
        group_angle := 3;
    end
    else begin
        if (group_angle == 1) then begin
            group_angle := 4;
        end
        else begin
            if (group_angle == 2) then begin
                group_angle := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    group_angle := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        group_angle := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            group_angle := 2;
                        end
                    end
                end
            end
        end
    end
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Glow1
begin
    variable LVar0 := 3;
    display_msg(message_str(SCRIPT_RNDDESRT, 280));
    Tot_Critter_A := random(2, 3);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
    Critter_type := 16777403;
    Critter_script := 850;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 5);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    if (random(0, 1)) then begin
        Critter_type := 16777241;
        Critter_script := 854;
        Critter_direction := random(0, 5);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Item := create_object(118, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger)) then begin
            LVar0 := 5;
        end
        while (LVar0) do begin
            Item := create_object(38, 0, 0);
            add_obj_to_inven(Critter, Item);
            LVar0 := LVar0 - 1;
        end
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Glow2
begin
    variable LVar0 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 281));
    LVar0 := game_time_hour;
    Tot_Critter_A := random(3, 5);
    if ((LVar0 > 600) and (LVar0 < 1900)) then begin
        Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 5;
        Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
    end
    else begin
        Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
        Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
    end
    Critter_type := 16777261;
    Critter_script := 953;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 5);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    if (random(0, 1)) then begin
        Critter_direction := random(0, 4);
        Critter_type := 16777259;
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Glow3
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 282));
    Tot_Critter_A := random(4, 8);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 8;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Critter_type := 16777227;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 4);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Item := create_object(92, 0, 0);
        add_obj_to_inven(Critter, Item);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Glow4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 283));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 4;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
    Critter_type := 16777261;
    Critter_script := 953;
    Tot_Critter_A := 1;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 2);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    radiation_inc(dude_obj, random(15, 30));
end

procedure Glow5
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 284));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 3;
    group_angle := random(0, 5);
    Tot_Critter_A := 1 + random(0, 1);
    Critter_type := 16777261;
    Critter_script := 953;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    if (random(0, 1)) then begin
        Critter_type := 16777259;
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
    end
end

procedure Glow6
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 285));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 2;
    Critter_script := 953;
    Critter_type := 16777259;
    Critter_direction := random(2, 5);
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    if (random(0, 1)) then begin
        Critter_type := 16777261;
        Critter_direction := random(1, 4);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Death1
begin
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 8;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 8;
    if (global_var(GVAR_KILL_DEATHCLAW) != 2) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 286));
        Critter_direction := random(0, 5);
        Critter_type := 16777267;
        Critter_script := 642;
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    end
    else begin
        display_msg(message_str(SCRIPT_RNDDESRT, 287));
        Critter_type := 16777227;
        Critter_script := 12;
        Tot_Critter_A := random(3, 5);
        while (Tot_Critter_A) do begin
            Critter_direction := random(0, 5);
            call Place_critter();
            anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
            Tot_Critter_A := Tot_Critter_A - 1;
        end
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Death2
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 288));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 3;
    Critter_direction := random(0, 5);
    Critter_type := 16777259;
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Death3
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    LVar0 := random(1, 6) + 2;
    if (obj_is_carrying_obj_pid(dude_obj, 126)) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 125));
        destroy_object(obj_carrying_pid_obj(dude_obj, 126));
    end
    else begin
        Skill_roll := roll_vs_skill(dude_obj, SKILL_OUTDOORSMAN, 20 * has_trait(TTRAIT_PERK, dude_obj, PERK_survivalist));
        if (is_success(Skill_roll)) then begin
            display_msg(message_str(SCRIPT_RNDDESRT, 110) + LVar0 + message_str(SCRIPT_RNDDESRT, 111));
        end
        else begin
            if (is_critical(Skill_roll)) then begin
                LVar1 := random(2, 4);
            end
            else begin
                LVar1 := random(2, 3);
            end
            display_msg(message_str(SCRIPT_RNDDESRT, 114) + LVar0 + message_str(SCRIPT_RNDDESRT, 115) + LVar1 + message_str(SCRIPT_RNDDESRT, 116));
            critter_injure(dude_obj, 2);
        end
        critter_dmg(dude_obj, LVar1, 0);
        LVar0 := LVar0 * 3600;
        game_time_advance(game_ticks(LVar0));
    end
end

procedure Death4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 299));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Tot_Critter_A := random(2, 4);
    group_angle := random(0, 5);
    Critter_type := 16777227;
    Critter_script := 12;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 4) - 2);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Death5
begin
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 10;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 3) + 10;
    if (1 == 1) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 300));
        Critter_direction := dude_rot + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        Critter_type := 16777254;
        Critter_script := 703;
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Item := create_object(18, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(4, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := item_caps_adjust(Critter, (random(20, 60) * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1);
        Item := create_object(40, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(31, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(111, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(9, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(1, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(90, 0, 0);
        add_obj_to_inven(Critter, Item);
        Item := create_object(125, 0, 0);
        add_obj_to_inven(Critter, Item);
        set_global_var(GVAR_TRENT_STATUS, 1);
    end
    else begin
        display_msg(message_str(SCRIPT_RNDDESRT, 301));
        Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 7;
        Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
        Critter_direction := random(0, 5);
        if (random(0, 3) == 3) then begin
            Critter_type := 16777226;
        end
        else begin
            Critter_type := 16777378;
        end
        Critter_script := 222;
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Death6
begin
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 5;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    if (global_var(GVAR_KILL_DEATHCLAW) != 2) then begin
        display_msg(message_str(SCRIPT_RNDDESRT, 302));
        Critter_direction := random(0, 5);
        Critter_type := 16777267;
        Critter_script := 642;
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    end
    else begin
        display_msg(message_str(SCRIPT_RNDDESRT, 303));
        Critter_type := 16777227;
        Critter_script := 12;
        Tot_Critter_A := random(3, 5);
        group_angle := random(0, 5);
        while (Tot_Critter_A) do begin
            Critter_direction := group_angle + (random(0, 4) - 2);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
            call Place_critter();
            anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
            Tot_Critter_A := Tot_Critter_A - 1;
        end
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Bone1
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 307));
    Tot_Critter_A := random(2, 3);
    group_angle := random(0, 5);
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
    Critter_type := 16777403;
    Critter_script := 850;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 4) - 2);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        if (random(1, 4) == 1) then begin
            Item := create_object(11, 0, 0);
        end
        else begin
            Item := create_object(12, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        if (random(1, 5) == 1) then begin
            Item := create_object(13, 0, 0);
            add_obj_to_inven(Critter, Item);
        end
        if (random(0, 2) == 0) then begin
            Item := item_caps_adjust(Critter, random(5, 20) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
        end
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    if (random(0, 1)) then begin
        Critter_type := 16777241;
        Critter_script := 854;
        Critter_direction := group_angle + (random(0, 4) - 2);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Item := create_object(12, 0, 0);
        add_obj_to_inven(Critter, Item);
        if (random(0, 2) == 0) then begin
            Item := item_caps_adjust(Critter, random(5, 20) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
        end
    end
    set_global_var(GVAR_WATER_THIEF_1, 3);
    call stranger();
end

procedure Bone2
begin
    variable LVar0 := 0;
    display_msg(message_str(SCRIPT_RNDDESRT, 308));
    group_angle := random(0, 5);
    if ((game_time_hour >= 1900) or (game_time_hour < 600) and random(0, 1)) then begin
        Critter := create_object(33555044, 0, 0);
        Critter_tile := tile_num_in_direction(Dude_tile, group_angle, 4);
        critter_attempt_placement(Critter, Critter_tile, 0);
        Critter := create_object(33555044, 0, 0);
        if (group_angle == 0) then begin
            Item := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Item := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Item := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Item := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Item := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Item := 2;
                            end
                        end
                    end
                end
            end
        end
        Critter_tile := tile_num_in_direction(Dude_tile, Item, 4);
        critter_attempt_placement(Critter, Critter_tile, 0);
    end
    Dude_tile := Dude_tile + (random(0, 4) - 2 + ((random(0, 2) - 1) * 200));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 4;
    Tot_Critter_A := random(3, 5);
    Tot_Critter_B := random(3, 5);
    Critter_type := 16777419;
    Critter_script := 749;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        LVar0 := random(0, 2);
        if (LVar0 == 0) then begin
            Item := create_object(18, 0, 0);
        end
        else begin
            if (LVar0 == 1) then begin
                Item := create_object(21, 0, 0);
            end
            else begin
                Item := create_object(8, 0, 0);
            end
        end
        add_obj_to_inven(Critter, Item);
        if (random(0, 2) == 0) then begin
            Item := item_caps_adjust(Critter, random(5, 25) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
        end
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    victim := Critter;
    Critter_type := 16777472;
    Critter_script := 751;
    if (group_angle == 0) then begin
        group_angle := 3;
    end
    else begin
        if (group_angle == 1) then begin
            group_angle := 4;
        end
        else begin
            if (group_angle == 2) then begin
                group_angle := 5;
            end
            else begin
                if (group_angle == 3) then begin
                    group_angle := 0;
                end
                else begin
                    if (group_angle == 4) then begin
                        group_angle := 1;
                    end
                    else begin
                        if (group_angle == 5) then begin
                            group_angle := 2;
                        end
                    end
                end
            end
        end
    end
    while (Tot_Critter_B) do begin
        Critter_direction := group_angle + (random(0, 2) - 1);
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        if (group_angle == 0) then begin
            Critter_direction := 3;
        end
        else begin
            if (group_angle == 1) then begin
                Critter_direction := 4;
            end
            else begin
                if (group_angle == 2) then begin
                    Critter_direction := 5;
                end
                else begin
                    if (group_angle == 3) then begin
                        Critter_direction := 0;
                    end
                    else begin
                        if (group_angle == 4) then begin
                            Critter_direction := 1;
                        end
                        else begin
                            if (group_angle == 5) then begin
                                Critter_direction := 2;
                            end
                        end
                    end
                end
            end
        end
        if (random(0, 2) == 0) then begin
            Critter_direction := Critter_direction + (random(0, 2) - 1);
            while (Critter_direction < 0) do begin
                Critter_direction := Critter_direction + 6;
            end
            if (Critter_direction > 5) then begin
                Critter_direction := Critter_direction % 6;
            end
        end
        anim(Critter, 1000, Critter_direction);
        if (random(0, 1)) then begin
            Item := create_object(4, 0, 0);
        end
        else begin
            Item := create_object(7, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        if (random(0, 2) == 0) then begin
            Item := item_caps_adjust(Critter, random(4, 25) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
        end
        Tot_Critter_B := Tot_Critter_B - 1;
    end
    attack_setup(Critter, victim);
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Bone3
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 309));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Tot_Critter_A := random(3, 7);
    group_angle := random(0, 5);
    Critter_type := 16777419;
    Critter_script := 749;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + random(0, 2 * 2) - 2;
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        if (random(0, 1)) then begin
            Item := create_object(8, 0, 0);
        end
        else begin
            Item := create_object(10, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        if (random(0, 2) == 0) then begin
            Item := item_caps_adjust(Critter, random(4, 25) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
        end
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777254;
    Critter_script := 749;
    Critter_direction := group_angle + random(0, 2 * 2) - 2;
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(1, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(47, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := item_caps_adjust(Critter, random(25, 100) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
    if (random(0, 1)) then begin
        Item := create_object(38, 0, 0);
        add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
    end
    if (random(0, 1)) then begin
        Item := create_object(6, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    if (random(0, 1)) then begin
        Item := create_object(31, 0, 0);
        add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
    end
    if (random(0, 1)) then begin
        Item := create_object(4, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Bone4
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 310));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Tot_Critter_A := random(2, 5);
    group_angle := random(0, 5);
    Critter_type := 16777419;
    Critter_script := 749;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + random(0, 2 * 2) - 2;
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        if (random(0, 1)) then begin
            Item := create_object(8, 0, 0);
        end
        else begin
            Item := create_object(10, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        if (random(0, 2) == 0) then begin
            Item := item_caps_adjust(Critter, random(4, 25) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
        end
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777254;
    Critter_script := 749;
    Critter_direction := group_angle + random(0, 2 * 2) - 2;
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(47, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := item_caps_adjust(Critter, random(25, 100) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
    if (random(0, 1)) then begin
        Item := create_object(38, 0, 0);
        add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
    end
    if (random(0, 1)) then begin
        Item := create_object(6, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    if (random(0, 1)) then begin
        Item := create_object(31, 0, 0);
        add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
    end
    if (random(0, 1)) then begin
        Item := create_object(4, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Bone5
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 311));
    Outer_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 6;
    Inner_ring := (get_critter_stat(dude_obj, STAT_pe) / 2) + 2;
    Tot_Critter_A := random(1, 3);
    group_angle := random(0, 5);
    Critter_type := 16777419;
    Critter_script := 749;
    while (Tot_Critter_A) do begin
        Critter_direction := group_angle + random(0, 2 * 2) - 2;
        while (Critter_direction < 0) do begin
            Critter_direction := Critter_direction + 6;
        end
        if (Critter_direction > 5) then begin
            Critter_direction := Critter_direction % 6;
        end
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        if (random(0, 1)) then begin
            Item := create_object(8, 0, 0);
        end
        else begin
            Item := create_object(10, 0, 0);
        end
        add_obj_to_inven(Critter, Item);
        if (random(0, 2) == 0) then begin
            Item := item_caps_adjust(Critter, random(4, 25) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
        end
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    Critter_type := 16777254;
    Critter_script := 749;
    Critter_direction := group_angle + random(0, 2 * 2) - 2;
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(1, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(47, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := item_caps_adjust(Critter, random(25, 100) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
    if (random(0, 1)) then begin
        Item := create_object(38, 0, 0);
        add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
    end
    if (random(0, 1)) then begin
        Item := create_object(6, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    if (random(0, 1)) then begin
        Item := create_object(31, 0, 0);
        add_mult_objs_to_inven(Critter, Item, has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1);
    end
    if (random(0, 1)) then begin
        Item := create_object(4, 0, 0);
        add_obj_to_inven(Critter, Item);
    end
    set_global_var(GVAR_WATER_THIEF_1, 2);
    call stranger();
end

procedure Bone6
begin
    display_msg(message_str(SCRIPT_RNDDESRT, 313));
    Tot_Critter_A := random(4, 6);
    if ((game_time_hour >= 700) and (game_time_hour < 1800)) then begin
        Outer_ring := 6;
        Inner_ring := 3;
    end
    else begin
        Outer_ring := 4;
        Inner_ring := 3;
    end
    Critter_type := 16777284;
    Critter_script := 735;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 5);
        call Place_critter();
        anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
        Tot_Critter_A := Tot_Critter_A - 1;
    end
    set_global_var(GVAR_WATER_THIEF_1, 1);
    call stranger();
end

procedure Scenes
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    variable LVar2 := 0;
    variable LVar3 := 0;
    variable LVar4 := 0;
    Tot_Critter_A := random(3, 14);
    LVar4 := -1;
    while (Tot_Critter_A) do begin
        Critter_direction := random(0, 5);
        Range := random(4, 28);
        Place_Holder := Range;
        LVar0 := tile_num_in_direction(Dude_tile, Critter_direction, Place_Holder);
        Critter_direction := random(0, 5);
        LVar0 := tile_num_in_direction(Dude_tile, Critter_direction, Place_Holder);
        LVar0 := LVar0 + (random(0, 2) - 1);
        Critter_direction := random(0, 5);
        LVar0 := tile_num_in_direction(Dude_tile, Critter_direction, Place_Holder);
        LVar0 := LVar0 + (random(0, 2) - 1);
        Critter_direction := random(0, 5);
        LVar0 := tile_num_in_direction(Dude_tile, Critter_direction, Place_Holder);
        LVar2 := random(0, 9);
        while (LVar4 == LVar2) do begin
            LVar2 := random(0, 9);
        end
        debug_msg(message_str(SCRIPT_RNDDESRT, 304) + LVar2 + "");
        if (LVar2 == 0) then begin
            LVar3 := random(1, 6);
            if (LVar3 == 1) then begin
                Item := create_object(33554517, 0, 0);
            end
            else begin
                if (LVar3 == 2) then begin
                    if (random(1, 4) == 1) then begin
                        Item := create_object(33554749, 0, 0);
                    end
                    else begin
                        Item := create_object(33554496, 0, 0);
                    end
                end
                else begin
                    if (LVar3 == 3) then begin
                        Item := create_object(33554555, 0, 0);
                    end
                    else begin
                        if (LVar3 == 4) then begin
                            Item := create_object(33554496, 0, 0);
                        end
                        else begin
                            if (LVar3 == 5) then begin
                                Item := create_object(33554497, 0, 0);
                            end
                            else begin
                                if (random(1, 3) == 1) then begin
                                    Item := create_object(33554498, 0, 0);
                                end
                                else begin
                                    Item := create_object(33554744, 0, 0);
                                end
                            end
                        end
                    end
                end
            end
        end
        else begin
            if (LVar2 == 1) then begin
                LVar3 := random(1, 3);
                if (LVar3 == 1) then begin
                    Item := create_object(33554712, 0, 0);
                end
                else begin
                    if (LVar3 == 2) then begin
                        Item := create_object(33554711, 0, 0);
                    end
                    else begin
                        Item := create_object(33554710, 0, 0);
                    end
                end
            end
            else begin
                if (LVar2 == 2) then begin
                    LVar3 := random(1, 5);
                    if (LVar3 == 1) then begin
                        Item := create_object(33554514, 0, 0);
                    end
                    else begin
                        if (LVar3 == 2) then begin
                            Item := create_object(33554515, 0, 0);
                        end
                        else begin
                            if (LVar3 == 3) then begin
                                Item := create_object(33554516, 0, 0);
                            end
                            else begin
                                if (LVar3 == 4) then begin
                                    Item := create_object(33554517, 0, 0);
                                end
                                else begin
                                    Item := create_object(33554518, 0, 0);
                                end
                            end
                        end
                    end
                end
                else begin
                    if (LVar2 == 3) then begin
                        Item := create_object(33554533, 0, 0);
                    end
                    else begin
                        if (LVar2 == 4) then begin
                            LVar3 := random(1, 4);
                            if (LVar3 == 1) then begin
                                Item := create_object(33554524, 0, 0);
                            end
                            else begin
                                if (LVar3 == 2) then begin
                                    Item := create_object(33554525, 0, 0);
                                end
                                else begin
                                    if (LVar3 == 3) then begin
                                        Item := create_object(33554524, 0, 0);
                                    end
                                    else begin
                                        Item := create_object(33554525, 0, 0);
                                    end
                                end
                            end
                        end
                        else begin
                            if (LVar2 == 5) then begin
                                LVar3 := random(1, 4);
                                if (LVar3 == 1) then begin
                                    Item := create_object(33554534, 0, 0);
                                end
                                else begin
                                    if (LVar3 == 2) then begin
                                        Item := create_object(33554535, 0, 0);
                                    end
                                    else begin
                                        if (LVar3 == 3) then begin
                                            Item := create_object(33554536, 0, 0);
                                        end
                                        else begin
                                            Item := create_object(33554534, 0, 0);
                                        end
                                    end
                                end
                            end
                            else begin
                                if (LVar2 == 6) then begin
                                    LVar3 := random(1, 3);
                                    if (LVar3 == 1) then begin
                                        Item := create_object(33554541, 0, 0);
                                    end
                                    else begin
                                        if (LVar3 == 2) then begin
                                            Item := create_object(33554542, 0, 0);
                                        end
                                        else begin
                                            Item := create_object(33554540, 0, 0);
                                        end
                                    end
                                end
                                else begin
                                    if (LVar2 == 7) then begin
                                        LVar3 := random(1, 4);
                                        if (LVar3 == 1) then begin
                                            Item := create_object(33554555, 0, 0);
                                        end
                                        else begin
                                            if (LVar3 == 2) then begin
                                                Item := create_object(33554553, 0, 0);
                                            end
                                            else begin
                                                if (LVar3 == 3) then begin
                                                    Item := create_object(33554556, 0, 0);
                                                end
                                                else begin
                                                    Item := create_object(33554554, 0, 0);
                                                end
                                            end
                                        end
                                    end
                                    else begin
                                        if (LVar2 == 8) then begin
                                            LVar3 := random(1, 3);
                                            if (LVar3 == 1) then begin
                                                Item := create_object(33554712, 0, 0);
                                            end
                                            else begin
                                                if (LVar3 == 2) then begin
                                                    Item := create_object(33554711, 0, 0);
                                                end
                                                else begin
                                                    Item := create_object(33554710, 0, 0);
                                                end
                                            end
                                        end
                                        else begin
                                            LVar3 := random(1, 6);
                                            if (LVar3 == 1) then begin
                                                Item := create_object(33554517, 0, 0);
                                            end
                                            else begin
                                                if (LVar3 == 2) then begin
                                                    if (random(1, 3) == 1) then begin
                                                        Item := create_object(33554749, 0, 0);
                                                    end
                                                    else begin
                                                        Item := create_object(33554496, 0, 0);
                                                    end
                                                end
                                                else begin
                                                    if (LVar3 == 3) then begin
                                                        Item := create_object(33554555, 0, 0);
                                                    end
                                                    else begin
                                                        if (LVar3 == 4) then begin
                                                            Item := create_object(33554496, 0, 0);
                                                        end
                                                        else begin
                                                            if (LVar3 == 5) then begin
                                                                Item := create_object(33554497, 0, 0);
                                                            end
                                                            else begin
                                                                if (random(1, 3) == 1) then begin
                                                                    Item := create_object(33554498, 0, 0);
                                                                end
                                                                else begin
                                                                    Item := create_object(random(0, 2) + 33554710, 0, 0);
                                                                end
                                                            end
                                                        end
                                                    end
                                                end
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
        LVar4 := LVar2;
        critter_attempt_placement(Item, LVar0, 0);
        Tot_Critter_A := Tot_Critter_A - 1;
    end
end

procedure Place_critter
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    Critter := create_object_sid(Critter_type, 0, 0, Critter_script);
    Range := random(Inner_ring, Outer_ring);
    LVar0 := random(0, 5);
    Critter_tile := tile_num_in_direction(Dude_tile, Critter_direction, Range);
    LVar1 := tile_num_in_direction(Critter_tile, LVar0, Range / 2);
    if ((tile_distance(Dude_tile, LVar1) <= Outer_ring) and (tile_distance(Dude_tile, LVar1) >= Inner_ring)) then begin
        Critter_tile := tile_num_in_direction(Critter_tile, LVar0, Range / 2);
    end
    critter_attempt_placement(Critter, Critter_tile, 0);
end

procedure hunters
begin
    Inner_ring := 8;
    Outer_ring := 5;
    group_angle := random(0, 5);
    Critter_direction := group_angle + random(0, 3 * 2) - 3;
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    Critter_type := 16777349;
    Critter_script := 241;
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(23, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(36, 0, 0);
    add_mult_objs_to_inven(Critter, Item, 4 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
    Item := create_object(17, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := item_caps_adjust(Critter, random(5, 30) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
    Item := create_object(144, 0, 0);
    add_mult_objs_to_inven(Critter, Item, 2);
    Critter_direction := group_angle + random(0, 3 * 2) - 3;
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    Critter_type := 16777467;
    Critter_script := 383;
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(7, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(2, 0, 0);
    add_obj_to_inven(Critter, Item);
    if (random(0, 2) == 0) then begin
        Item := item_caps_adjust(Critter, random(5, 30) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
    end
    Critter_direction := group_angle + random(0, 3 * 2) - 3;
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    Critter_type := 16777472;
    Critter_script := 383;
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(143, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(34, 0, 0);
    add_mult_objs_to_inven(Critter, Item, 3 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
    Item := create_object(2, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(14, 0, 0);
    add_mult_objs_to_inven(Critter, Item, 2 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
    if (random(0, 2) == 0) then begin
        Item := item_caps_adjust(Critter, random(5, 40) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
    end
    Critter_direction := group_angle + random(0, 3 * 2) - 3;
    while (Critter_direction < 0) do begin
        Critter_direction := Critter_direction + 6;
    end
    if (Critter_direction > 5) then begin
        Critter_direction := Critter_direction % 6;
    end
    Critter_type := 16777462;
    Critter_script := 383;
    call Place_critter();
    anim(Critter, 1000, rotation_to_tile(tile_num(Critter), tile_num(dude_obj)));
    Item := create_object(18, 0, 0);
    add_obj_to_inven(Critter, Item);
    Item := create_object(31, 0, 0);
    add_mult_objs_to_inven(Critter, Item, 2 * (has_trait(TTRAIT_PERK, dude_obj, PERK_scrounger) + 1));
    Item := create_object(2, 0, 0);
    add_obj_to_inven(Critter, Item);
    if (random(0, 2) == 0) then begin
        Item := item_caps_adjust(Critter, random(5, 30) * ((2 * has_trait(TTRAIT_PERK, dude_obj, PERK_fortune_finder)) + 1));
    end
    call stranger();
end

procedure add_party
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    party_elevation := elevation(dude_obj);
    if (global_var(GVAR_TANDI_STATUS) == 5) then begin
        if (Tandi_ptr == 0) then begin
        end
        critter_add_trait(Tandi_ptr, TTRAIT_OBJECT, OBJECT_TEAM_NUM, 0);
    end
end

procedure update_party
begin
    variable LVar0 := 0;
    variable LVar1 := 0;
    if (elevation(dude_obj) != party_elevation) then begin
        party_elevation := elevation(dude_obj);
        if (global_var(GVAR_IAN_STATUS) == 2) then begin
            if (Ian_ptr == 0) then begin
            end
            else begin
                move_to(Ian_ptr, tile_num_in_direction(tile_num(dude_obj), 1, 2), elevation(dude_obj));
            end
        end
        if (global_var(GVAR_DOG_EMPATHY)) then begin
            if (Dog_ptr == 0) then begin
            end
            else begin
                move_to(Dog_ptr, tile_num_in_direction(tile_num(dude_obj), 2, 1), elevation(dude_obj));
            end
        end
        if (global_var(GVAR_HERNANDEZ_STATUS) == 2) then begin
            if (Tycho_ptr == 0) then begin
            end
            else begin
                move_to(Tycho_ptr, tile_num_in_direction(tile_num(dude_obj), 3, 2), elevation(dude_obj));
            end
        end
        if (global_var(GVAR_KATJA_STATUS) == 2) then begin
            if (Katja_ptr == 0) then begin
            end
            else begin
                move_to(Katja_ptr, tile_num_in_direction(tile_num(dude_obj), 4, 2), elevation(dude_obj));
            end
        end
        if (global_var(GVAR_TANDI_STATUS) == 5) then begin
            if (Tandi_ptr == 0) then begin
            end
            else begin
                move_to(Tandi_ptr, tile_num_in_direction(tile_num(dude_obj), 4, 4), elevation(dude_obj));
            end
        end
    end
end

procedure remove_party
begin
    if (global_var(GVAR_IAN_STATUS) == 2) then begin
        set_global_var(GVAR_IAN_STATUS, 2);
    end
    if (global_var(GVAR_DOG_EMPATHY)) then begin
        set_global_var(GVAR_DOG_EMPATHY, 1);
    end
    if (global_var(GVAR_HERNANDEZ_STATUS) == 2) then begin
        set_global_var(GVAR_HERNANDEZ_STATUS, 2);
    end
    if (global_var(GVAR_KATJA_STATUS) == 2) then begin
        set_global_var(GVAR_KATJA_STATUS, 2);
    end
    if (global_var(GVAR_TANDI_STATUS) == 5) then begin
    end
end

procedure Darkness
begin
    set_light_level(40);
end

procedure Invasion
begin
    if (not(global_var(GVAR_MASTER_BLOWN) == 2)) then begin
        if (global_var(GVAR_NECROPOLIS_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
            set_global_var(GVAR_NECROPOLIS_INVADED, 1);
        end
        if (global_var(GVAR_THE_HUB_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
            set_global_var(GVAR_HUB_INVADED, 1);
        end
        if (global_var(GVAR_BROTHERHOOD_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
            set_global_var(GVAR_BROTHERHOOD_INVADED, 1);
        end
        if (global_var(GVAR_JUNKTOWN_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
            set_global_var(GVAR_JUNKTOWN_INVADED, 1);
        end
        if (global_var(GVAR_SHADY_SANDS_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
            set_global_var(GVAR_SHADY_SANDS_INVADED, 1);
        end
        if (global_var(GVAR_VAULT_13_INVADED_DATE) <= 0) then begin
            set_global_var(GVAR_VAULT_INVADED, 1);
        end
        if (global_var(GVAR_FOLLOWERS_INVADED_DATE) > (game_time / (10 * 60 * 60 * 24))) then begin
            set_global_var(GVAR_FOLLOWERS_INVADED, 1);
        end
    end
end

Advertisement