Please or Register to create posts and topics.

Felix Griffin's Editor Mod (FGEMOD)

PreviousPage 17 of 24Next

When i make a map, cant i test it and i cant post it on steam? i think that i dont have good installed or something, is it a problem that i have installed the bee mod before? Idk how to uninstall. help? please make a video tutorual? than can i see how to setup.

-SjorsMaster

I'm sorry, I can't quite understand what you're saying. If you want to uninstall the mod, just validate your game cache. If you want to install it but don't think it worked, I'm making an installer EXE for the next version.

Falsi sumus crusto!

ok :)
Sorry im dutch xd
Check my other message, maybe get you it now
?

There is a trigger which detects the presence of a player within its area, but is there a similar one for objects, such as cubes and spheres? It would help detecting certain player-has-trapped-themselves situations.

P.S. Confirmed the choreo box works now that I used the proper global_ents.vmf file. What is the purpose of the .vmx files though?

Those are Hammer backups. Every time you save, the process goes something like this:

Player selects "Save" for map "sample.vmf"
Delete "sample.vmx"
Rename "sample.vmf" to "sample.vmx"
Save as "sample.vmf

So if anything goes wrong while saving, you can rename the VMX back and not lose your map.

And there isn't a cube-only trigger, but it would be easy to make. The trick is, how would the player select what should trigger it? I suppose I could have three items (player-only, cube-only, turret-only), but it would clutter the palette a bit.

Falsi sumus crusto!
FelixGriffin wrote:
[vmx files] Those are Hammer backups.

Allright, so they do not really need to be in a distribution package, and to be saved on the harddisks of everyone who gets a copy of one's mod... Would you agree? :P

FelixGriffin wrote:
And there isn't a cube-only trigger, but it would be easy to make. The trick is, how would the player select what should trigger it? I suppose I could have three items (player-only, cube-only, turret-only), but it would clutter the palette a bit.

The palette is not really cluttered that much if you have the selection as a button type. And since there's already Ben's player-triggered "trigger once / trigger multiple / autosave", this one might have the following three options:
"Trigger cube": Triggers on any non-sphere cubes, including the ancient cube and the various modified cubes.
"Trigger sphere": Triggers on the edgeless safety cube only.
"Trigger any non-player object": Triggers on turrets, cubes, spheres, cameras...
I believe these three choices (lacking more options than three) would allow maximal liberty in distinguishing the circumstances within the puzzle.

Another possibility would be that one option detects Camera, Sphere, Frankencube and Regular cube; second option detects Companion, Sphere, Turret and Regular cube, and third option detects Lens cube, Frankencube, Turret and Regular cube. Logic-savvy people could distinguish all these seven objects by observing which combination of triggers is fired, but it might be annoying to use for everyone. Or the filter type might be configured with a button timer (integer) but those are somewhat awkward to use and cost more at runtime.

I think also that it should be done only as a "multiple" trigger type (i.e. on and off signals), so it can be reused. If an "once" functionality is needed, the map designer can make a latch out of a laser loop in order to get an uninterrupted signal once the trigger is first hit.

Would that be doable? Unfortunately I don't have the expertise for that...

Oh, one more thing: There is really often a need to ensure an initial orientation for a lens cube while also having the lens cube respawn if destroyed. I have tried numerous contraptions to ensure an initial orientation for a cube, the funniest one being a random bounce-o-matic that keeps bouncing the cube with faith plates, back and forth, until its laser beam hits a receiver in a right position, and then it is transferred down with a funnel. None worked adequately.
Is it possible to create a sort of filter trigger that automatically reorients a cube to a certain predefined angle (set in the editor much like the turret angles are) when it passes through it? This way you could have a dropper in ceiling, and the filter on floor, to ensure that when the cube is dropped (the first or any subsequential time), it is oriented just as if there was no dropper to begin with. It might need an "enable" input signal so that it does not prevent the player reorienting the cube when they are picking it up in the area of the filter (or just disable the filter whenever the player clips with its area). Another neat way of implementing this would be to teleport the cube already-oriented to its target location, possibly accompanied with a particle effect. This would dodge the clumsy looking physics problem when the cube does not bounce upon falling.
I realize this problem does not exist in Hammer, where you can tie a cube dropper's initial drop to the destruction event of a named cube, but...

ill make a video, maybe can you than help,
Link on sunday

Okay, I kind of grew bored of waiting for PortalCombat to deliver, so I created a shell script that generates a replacement for the entities in global_ents_choreo.vmf . This is not yet the 3*28 promised by PortalCombat, but it is 40. It is also rather easy to edit this. You only need to edit the lines that begin with "scene" and a number near the top of the file and rerun the script as explained below.

To use, run this script (in a standard unix shell): ./make_scenes.sh > tmptmp.txt
If you don't have a Linux system or a Cygwin/MSYS shell, use jslinux... (This suggestion in half-jest)
Then edit and replace all "entities" in global_ents_choreo.vmf with the outcome of the script (once).
Or download the outcome here (if you are not interested in editing it): http://bisqwit.iki.fi/kala/global_ents_choreo.vmf

To use the B and C sets of dialog lines, copy the choreo.vmf file into choreo_b.vmf and choreo_c.vmf, where you replace @fgemod_choreo with @fgemod_choreo_b and @fgemod_choreo_c respectively.

Code: Select all
#!/bin/sh
#

esc="`echo -e "33"`"

make_scenes()
{
        func="$1"
        shift
        other="$*"

        scene()
        {
                $func $1 $2 $3 $other
        }

        scene  3 A COOP_LAUGH01                         # Hahahaha.
        scene  4 A botcoop_intro05                      # Good.
        scene  5 A gladosbattle_xfer07                  # No!
        scene  6 A gladosbattle_xfer10                  # (Extatic) Yes!
        scene  7 A mp_credits17                         # Cryptic.
        scene  8 A mp_credits32                         # Cheater.
        scene  9 A testchambermisc41                    # Surprise.
        scene 10 A sp_incinerator_01_03                 # There it is.
        scene 11 A sp_incinerator_01_04                 # Hold on.
        scene 12 A sp_incinerator_01_05                 # There. (Done)
        scene 13 A sp_catapult_fling_sphere_peek_failureone03 # There. Try it now.
        scene 14 A sp_catapult_fling_sphere_peek_failuretwo03 # Try it now.
        scene 15 A sp_laser_over_goo_entry01            # One moment!
        scene 16 A botcoop_artifactone05                # The end.
        scene 17 A botcoop_artifactone06                # The end?
        scene 18 A gladosbattle_xfer14                  # Not so fast.
        scene 19 A mp_credits13                         # Incoherent.

        scene  3 B anti_taunt01                         # Stop it!
        scene  4 B sp_sabotage_glados_confused04        # (Agitated) What are you doing!?
        scene  5 B mp_coop_catapult_wall_introdeath01   # Your failure brings back such wonderful memories.
        scene  6 B mp_death06                           # If at first you don't succeed, fail five more times.
        scene  7 B mp_death08                           # If I made these tests any easier, they wouldn't be tests.
        scene  8 B taunt_rockpaperscissors01            # I defy you to tell me there's a purpose to what you are doing.
        scene  9 B mp_credits16                         # Chronically late.
        scene 10 B mp_credits38                         # Ignores test at hand... Mwawawa. Won't for long.
        scene 11 B mp_credits43                         # Ignores directions.
        scene 12 B mp_coop_catapult_wall_intro04        # This isn't science.
        scene 13 B coop_privatetalk_both01              # Test chamber completed. (Random numbers)
        scene 14 B coop_privatetalk_both04              # Test chamber completed. (Random fruits)
        scene 15 B sp_unassisted_angle_fling_entry01    # This next test*bang*... is...*bang* Dangerous-I'll-be-right-back.
        scene 16 B testchambermisc12                    # Waddle over to the elevator and we'll continue testing.
        scene 17 B testchambermisc35                    # I made it all up.

        scene  3 C mp_credits61                         # Startles easily. *Boo*
        scene  4 C coop_test_chamber_both01             # (Emphasizes how the test is deathly if teamwork does not work.)
        scene  5 C sp_shoot_through_wall_entry01        # (Softly) You know, I'm not supposed to do this, but you can shoot some..thing, through the blue bridges.
        scene  6 C sp_shoot_through_wall_completion01   # (Softly) Did my hint help? It did, didn't it? You know, if any of our supervisors had been immune to neurotoxin, they'd be furious with us right now.
        scene  7 C sp_turret_intro_entry01              # (Softly) (underhanded hint about turrets firing real bullets)
        scene  8 C botcoop_artifactone_hub08            # Well, let's do some testing to see what happens.
        scene  9 C coop_test_chamber_oneplayer37        # You have gift for these tests. That's not flattery. It is a fact.
        scene 10 C coop_test_chamber_both08             # (You come off as a team, thanks to the one who does all work.)
}

id=50
make_entities()
{
        fn="scenes/npc/glados/$3".vcd
        choreo_name=choreo_"$1"_"$2"_"$3"
        id=$((id+1))

        cat <<EOF
entity
{
        "id" "$id"
        "classname" "logic_choreographed_scene"
        "busyactor" "1"
        "onplayerdeath" "0"
        "SceneFile" "$fn"
        "targetname" "$choreo_name"
        connections
        {
                "OnStart" "!self${esc}Resume${esc}${esc}0.2${esc}-1"
                "OnStart" "!self${esc}Pause${esc}${esc}0${esc}-1"
                "OnStart" "@ding_on${esc}Start${esc}${esc}0${esc}-1"
                "OnCompletion" "@ding_off${esc}Start${esc}${esc}0${esc}-1"
        }
        "origin" "-32 64 -64"
        editor
        {
                "color" "0 0 255"
                "visgroupshown" "1"
                "visgroupautoshown" "1"
                "logicalpos" "[0 0]"
        }
}
EOF
}

make_event_responder()
{
        id=$((id+1))

        cat <<EOF
entity
{
        "id" "$id"
        "classname" "logic_case"
EOF

        make_cases()
        {
                if [ "$2" = "$4" ]; then
                        n=$1
                        printf "t"Case%02d" "%d"n" $((n-2)) $n
                fi
        }
        make_scenes make_cases $1

        echo -e "t"targetname" "$2""
        echo -e "tconnections"
        echo -e "t{"

        make_cases()
        {
                if [ "$2" = "$4" ]; then
                        n=$1
                        printf "tt"OnCase%02d" "choreo_%d_%s_%s%sStart%s%s0%s-1"n" $((n-2)) $n $2 $3 "$esc" "$esc" "$esc" "$esc"
                fi
        }
        make_scenes make_cases $1
        cat <<EOF
        }
        "origin" "64 -64 -64"
        editor
        {
                "color" "220 30 220"
                "visgroupshown" "1"
                "visgroupautoshown" "1"
                "logicalpos" "[0 1500]"
        }
}
EOF
}

make_scenes make_entities
make_event_responder A "@fgemod_choreo"
make_event_responder B "@fgemod_choreo_b"
make_event_responder C "@fgemod_choreo_c"

Similarly, replace the contents of science/fg_choreo.test with this:

Code: Select all
FG Choreo
Makes GLaDOS play a line when triggered. Select the line using the button-timer-thingy.

   "Item"
   {
      "ItemClass"   "ItemButtonFloor"
      "Type"         "ITEM_CHOREO"
      "Editor"
      {
         "SubTypeProperty"      "ButtonType"
         "SubType"
         {
            "Name"      "Choreo Box: A"
            "Model"
            {
               "ModelName"      "choreo.3ds"
               "TextureName"   "buttonpedestal.png"
            }
            "Palette"
            {
               "Tooltip"      "GLADOS CHOREO BOX"
               "Image"         "palette/choreo.png"
               "Position"      "$P"
            }
            "Sounds"
            {
               "SOUND_CREATED"               "P2Editor.PlaceOther"
               "SOUND_EDITING_ACTIVATE"      "P2Editor.ExpandOther"
               "SOUND_EDITING_DEACTIVATE"      "P2Editor.CollapseOther"
               "SOUND_DELETED"               "P2Editor.RemoveOther"
            }
         }
         "SubType"
         {
            "Name"      "Choreo Box: B"
            "Model"
            {
               "ModelName"      "choreo.3ds"
               "TextureName"   "buttonpedestal.png"
            }
            "Sounds"
            {
               "SOUND_CREATED"               "P2Editor.PlaceOther"
               "SOUND_EDITING_ACTIVATE"      "P2Editor.ExpandOther"
               "SOUND_EDITING_DEACTIVATE"      "P2Editor.CollapseOther"
               "SOUND_DELETED"               "P2Editor.RemoveOther"
            }
         }
         "SubType"
         {
            "Name"      "Choreo Box: C"
            "Model"
            {
               "ModelName"      "choreo.3ds"
               "TextureName"   "buttonpedestal.png"
            }
            "Sounds"
            {
               "SOUND_CREATED"               "P2Editor.PlaceOther"
               "SOUND_EDITING_ACTIVATE"      "P2Editor.ExpandOther"
               "SOUND_EDITING_DEACTIVATE"      "P2Editor.CollapseOther"
               "SOUND_DELETED"               "P2Editor.RemoveOther"
            }
         }
         "MovementHandle"      "HANDLE_NONE"
         "OccupiesVoxel"         "0"
         "CanAnchorOnBarriers"   "1"
         "CanAnchorOnGoo"      "1"
      }
      "Properties"
      {
         "TimerDelay"
         {
            "DefaultValue"   "3"
            "Index"         "1"
         }
         "TimerSound"
         {
            "DefaultValue"   "0"
            "Index"         "2"
         }
         "ButtonType"
         {
            "DefaultValue"   "0"
            "Index"         "0"
         }
      }
      "Exporting"
      {
         "Instances"
         {
            "0"
            {
               "Name"            "instances/p2editor/fg_editor_mod/choreo.vmf"
               "EntityCount"      "2"
               "BrushCount"      "0"
               "BrushSideCount"   "0"
            }
            "1"
            {
               "Name"            "instances/p2editor/fg_editor_mod/choreo.vmf"
               "EntityCount"      "2"
               "BrushCount"      "0"
               "BrushSideCount"   "0"
            }
            "2"
            {
               "Name"            "instances/p2editor/fg_editor_mod/choreo_b.vmf"
               "EntityCount"      "2"
               "BrushCount"      "0"
               "BrushSideCount"   "0"
            }
            "3"
            {
               "Name"            "instances/p2editor/fg_editor_mod/choreo_b.vmf"
               "EntityCount"      "2"
               "BrushCount"      "0"
               "BrushSideCount"   "0"
            }
            "4"
            {
               "Name"            "instances/p2editor/fg_editor_mod/choreo_c.vmf"
               "EntityCount"      "2"
               "BrushCount"      "0"
               "BrushSideCount"   "0"
            }
            "5"
            {
               "Name"            "instances/p2editor/fg_editor_mod/choreo_c.vmf"
               "EntityCount"      "2"
               "BrushCount"      "0"
               "BrushSideCount"   "0"
            }
         }

         "TargetName"      "choreo"
         "Inputs"
         {
            "CONNECTION_STANDARD"
            {
               "Activate"      "instance:input;Trigger"
               "Deactivate"   "instance:input;Enable"
            }
         }

         "ConnectionPoints"
         {
            // outside voxel
            "Point"
            {
               "Dir"            "1 0 0"
               "Pos"            "-1 6 0"
               "SignageOffset"      "-2 7 0"
               "Priority"  "0"
               "GroupID"   "0"
            }
            "Point"
            {
               "Dir"            "1 0 0"
               "Pos"            "-1 4 0"
               "SignageOffset"      "-2 5 0"
               "Priority"  "0"
               "GroupID"   "0"
            }
            "Point"
            {
               "Dir"            "1 0 0"
               "Pos"            "-1 2 0"
               "SignageOffset"      "-2 3 0"
               "Priority"  "0"
               "GroupID"   "0"
            }
            "Point"
            {
               "Dir"            "1 0 0"
               "Pos"            "-1 0 0"
               "SignageOffset"      "-2 1 0"
               "Priority"  "0"
               "GroupID"   "0"
            }

            // sides
            "Point"
            {
               "Dir"            "0 1 0"
               "Pos"            "0 -1 0"
               "SignageOffset"      "1 -2 0"
               "Priority"  "1"
               "GroupID"   "1"
            }
            "Point"
            {
               "Dir"            "0 -1 0"
               "Pos"            "0 8 0"
               "SignageOffset"      "1 9 0"
               "Priority"  "1"
               "GroupID"   "2"
            }

            // inside voxel
            "Point"
            {
               "Dir"            "-1 0 0"
               "Pos"            "2 6 0"
               "SignageOffset"      "3 7 0"
               "Priority"  "2"
               "GroupID"   "3"
            }
            "Point"
            {
               "Dir"            "-1 0 0"
               "Pos"            "2 4 0"
               "SignageOffset"      "3 5 0"
               "Priority"  "2"
               "GroupID"   "3"
            }
            "Point"
            {
               "Dir"            "-1 0 0"
               "Pos"            "2 2 0"
               "SignageOffset"      "3 3 0"
               "Priority"  "2"
               "GroupID"   "3"
            }
            "Point"
            {
               "Dir"            "-1 0 0"
               "Pos"            "2 0 0"
               "SignageOffset"      "3 1 0"
               "Priority"  "2"
               "GroupID"   "3"
            }
         }

         "Offset"   "64 64 64"
      }
   }

Bisqwit wrote:
Okay, I kind of grew bored of waiting for PortalCombat to deliver

... totally forgot about the GLaDOS Chroeo lines... wasn't playing Portal 2 the last days at all.
But it seems like you got your own thing working - nice! :thumbup:

[back on TWP since 08. July 2017]
Steam: DrFauli

About the triggers: but I would also need the once/multiple selection, or a way to disable the triggers.

Falsi sumus crusto!
PreviousPage 17 of 24Next