Post by cuteio14 on Nov 2, 2016 15:14:36 GMT
People say that modding Luxor 3 is difficult. Well, HERE ARE THE EVIDENCE!!!
1. I used node and I copied the whole .obj strings to a text document.
2. I copied the vertices to the .LX3TRK File.
3. I replaced the V into Vert
The Sections part is REALLY A BIG ANNOYANCE You always have to put all the vertices in there.
For Example:
Missing vertices in that section will be ignored here
This is the correct one.
The NamedPoints the Canopic Jars are placed.
1. Make a .tga file
2. Go to image.online-convert.com/convert-to-png and convert the file
3. Copy and paste the download to the level.
Once you run it, It works.
MORE ABOUT PLACEABLES COMING SOON!
The CanopicJarSpawnPoints is where the Canopic jars are spawned.
The First Placeable is the danger. You can put where the flashing red light at the pyramid. It does not go to the end automatically.
I really have no idea what trackSectionLink is but you can figure it out by yourself! (Or I if your lazy!)
The EndSpeed slows down the spheres. To use it, put it at a far distance but not too close or else it will let the spheres move a normal speed.
PROTIP: The spheres automatically slow down at the danger.
The Occluded puts the spheres in like a shadow.
The Danger is the danger zone
The Unshootable is where you cannot shoot the spheres
The SpawnRestrictive I think restricts the spheres from spawning. (I am not sure!)
The scales are how the spheres get bigger or smaller (I think).
You can add the strings in data/locale/strings/English.txt
1. Improper/Lack of a foreground mask
2. Improper distance between the last 2 vertices
So first of all, you must have a foreground mask of your map. If there isn't anything in the very front (therefore blocking the spheres) but the pyramid, your foreground mask should look like this if your map looks like this. This makes the blocker thingamajig actually appear, but improper distance between the last 2 vertices can result in the spheres stopping in the wrong place, creating a permanent blocker (which is insanely OP, and makes loosing impossible). I am still not sure what exactly needs to be done, but these are my last 3 vertices of the map. The dots represent the vertices, the orange line represents the pyramid gate, and the red line represents the pyramid path. Using the sphere cursor in N.O.D.E, I made the last 2 vertices around 35 pixels apart, (when before, it was around 5 times as much) and now the actual gameplay of the blocker works
I'll make an extra detailed tutorial if any of you don't get it.I have an explanation on making a foreground mask. You can look back up on Making Alpha Images.
Then Name whatever you want:
Whew, finally I can edit my posts.
More evidence coming soon.
FIRST! How to Make Maps!
Making maps is not that easy! It takes some time to do this. This is how I made maps
Track making
The Vertices is where the spheres go. It goes from up to down. Here is how I did it.1. I used node and I copied the whole .obj strings to a text document.
2. I copied the vertices to the .LX3TRK File.
// Luxor 3 Track File
Verts
{
V 283 24 0.02
V 89 -328 0.02
V 86 -337 0.02
V 83 -345 0.02
V 87 -350 0.02
V 92 -353 0.02
V 103 -351 0.02
V 397 -354 0.02
V 405 -352 0.02
V 412 -349 0.02
V 415 -341 0.02
V 414 -334 0.02
V 336 -129 0.02
V 334 -116 0.02
V 340 -108 0.02
V 349 -107 0.02
V 677 -104 0.02
V 685 -105 0.02
V 694 -111 0.02
V 700 -121 0.02
V 700 -128 0.02
V 623 -324 0.02
V 617 -333 0.02
V 608 -338 0.02
V 600 -336 0.02
V 595 -329 0.02
V 588 -324 0.02
V 536 -195 0.02
V 528 -181 0.02
V 512 -175 0.02
V 506 -175 0.02
V 454 -177 0.02
V 444 -178 0.02
V 440 -186 0.02
V 440 -193 0.02
V 443 -194 0.02
V 540 -433 0.02
V 541 -439 0.02
V 538 -445 0.02
V 531 -451 0.02
V 525 -453 0.02
V 521 -454 0.02
V 168 -449 0.01
V 128 -449 0.01
}
Sections
{
"initial" { 0 1 2 }
"slowdown01" { 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 }
"occlude01" { 16 17 18 19 }
"slowdown02" { 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 }
"restrict" { 19 20 21 22 23 24 25 }
"pyramid_gate" { 41 42 }
"pyramid" { 42 43 }
}
Reflectors
{
}
NamedPoints
{
"point_spawn01" ( 262, -238. )
"point_spawn02" ( 605, -190 )
"point_spawn03" ( 735, -385 )
}
3. I replaced the V into Vert
// Luxor 3 Track File
Verts
{
Vert 283 24 0.02
Vert 89 -328 0.02
Vert 86 -337 0.02
Vert 83 -345 0.02
Vert 87 -350 0.02
Vert 92 -353 0.02
Vert 103 -351 0.02
Vert 397 -354 0.02
Vert 405 -352 0.02
Vert 412 -349 0.02
Vert 415 -341 0.02
Vert 414 -334 0.02
Vert 336 -129 0.02
Vert 334 -116 0.02
Vert 340 -108 0.02
Vert 349 -107 0.02
Vert 677 -104 0.02
Vert 685 -105 0.02
Vert 694 -111 0.02
Vert 700 -121 0.02
Vert 700 -128 0.02
Vert 623 -324 0.02
Vert 617 -333 0.02
Vert 608 -338 0.02
Vert 600 -336 0.02
Vert 595 -329 0.02
Vert 588 -324 0.02
Vert 536 -195 0.02
Vert 528 -181 0.02
Vert 512 -175 0.02
Vert 506 -175 0.02
Vert 454 -177 0.02
Vert 444 -178 0.02
Vert 440 -186 0.02
Vert 440 -193 0.02
Vert 443 -194 0.02
Vert 540 -433 0.02
Vert 541 -439 0.02
Vert 538 -445 0.02
Vert 531 -451 0.02
Vert 525 -453 0.02
Vert 521 -454 0.02
Vert 168 -449 0.01
Vert 128 -449 0.01
}
Sections
{
"initial" { 0 1 2 }
"slowdown01" { 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 }
"occlude01" { 16 17 18 19 }
"slowdown02" { 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 }
"restrict" { 19 20 21 22 23 24 25 }
"pyramid_gate" { 41 42 }
"pyramid" { 42 43 }
}
Reflectors
{
}
NamedPoints
{
"point_spawn01" ( 262, -238. )
"point_spawn02" ( 605, -190 )
"point_spawn03" ( 735, -385 )
}
The Sections part is REALLY A BIG ANNOYANCE You always have to put all the vertices in there.
For Example:
Sections
{
"initial" { 0 1 2 }
"occlude01" { 16 17 18 19 }
"pyramid_gate" { 41 42 }
"pyramid" { 42 43 }
}
Missing vertices in that section will be ignored here
Sections
{
"initial" { 0 1 2 }
"slowdown01" { 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 }
"occlude01" { 16 17 18 19 }
"slowdown02" { 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 }
"restrict" { 19 20 21 22 23 24 25 }
"pyramid_gate" { 41 42 }
"pyramid" { 42 43 }
}
This is the correct one.
The NamedPoints the Canopic Jars are placed.
(RECENT, Optional) Adding Multiple Paths
Jan 4, 2018 22:00:26 GMT gs49 said:
It's really simple. Let's take a look at some sections!
See how the blue numbers appear twice? That's to make sure that the path continues in one long line, but if you're making multiple paths, you don't want one continuous path. You want more than one path. In Luxor and AR, you would create 2 path files and edit the map.ui so that both paths are in that level, but here, you'll want to do some chopping.
Here, vertice 61 does not repeat at the beginning of the section initialc02. This will prompt the game to create a whole new path, starting with the section initialc02. Now go to your placeables.txt.
You will have to replace your track section link of the pyramid tip with the section the first path ends with, and create a new pyramid tip and put the end of the second path ends with, and so on.
Now this ends this tutorial, but now I present to you the first Luxor level with 4 paths and 3 pyramids!
"occludea02" { 52 53 54 55 }
"initialb02" { 55 56 57 58 }
"occludedb02" { 58 59 60 61 }
"initialc02" { 61 62 63 64 }
"occludec02" { 64 65 66 67 }
"initiald02" { 67 68 69 70 }
"initialb02" { 55 56 57 58 }
"occludedb02" { 58 59 60 61 }
"initialc02" { 61 62 63 64 }
"occludec02" { 64 65 66 67 }
"initiald02" { 67 68 69 70 }
See how the blue numbers appear twice? That's to make sure that the path continues in one long line, but if you're making multiple paths, you don't want one continuous path. You want more than one path. In Luxor and AR, you would create 2 path files and edit the map.ui so that both paths are in that level, but here, you'll want to do some chopping.
"occludea02" { 52 53 54 55 }
"initialb02" { 55 56 57 58 }
"occludedb02" { 58 59 60 61 }
"initialc02" { 62 63 64 }
"occludec02" { 64 65 66 67 }
"initiald02" { 67 68 69 70 }
"initialb02" { 55 56 57 58 }
"occludedb02" { 58 59 60 61 }
"initialc02" { 62 63 64 }
"occludec02" { 64 65 66 67 }
"initiald02" { 67 68 69 70 }
Here, vertice 61 does not repeat at the beginning of the section initialc02. This will prompt the game to create a whole new path, starting with the section initialc02. Now go to your placeables.txt.
Placeable { drawLayer "AboveEverything" name "pyramid_tip" effect "Pyramid_Danger_Flash" pos (64.0, 35.0) trackSectionLink "occludedb02" }
Placeable { drawLayer "AboveEverything" name "pyramid_tip" effect "Pyramid_Danger_Flash" pos (64.0, 35.0) trackSectionLink "initiald02" }
Placeable { drawLayer "AboveEverything" name "pyramid_tip" effect "Pyramid_Danger_Flash" pos (64.0, 35.0) trackSectionLink "initiald02" }
You will have to replace your track section link of the pyramid tip with the section the first path ends with, and create a new pyramid tip and put the end of the second path ends with, and so on.
Now this ends this tutorial, but now I present to you the first Luxor level with 4 paths and 3 pyramids!
IMPORTANT: Making Alpha Images
The alpha image cannot be done directly just by using a painting software and that's it, IT LITERALLY REJECTS THAT! So how I did is1. Make a .tga file
2. Go to image.online-convert.com/convert-to-png and convert the file
3. Copy and paste the download to the level.
Once you run it, It works.
Placeables
This is where the level effects are placed in. Here is my placeable list in "Feathery Blocks"CanopicJarSpawnPoints
{
pos "point_spawn01"
pos "point_spawn02"
pos "point_spawn03"
}
Placeable
{
drawLayer "AboveEverything"
name "pyramid_tip"
effect "Pyramid_Danger_Flash"
pos (128.0, 449.0)
trackSectionLink "pyramid"
}
MORE ABOUT PLACEABLES COMING SOON!
The CanopicJarSpawnPoints is where the Canopic jars are spawned.
The First Placeable is the danger. You can put where the flashing red light at the pyramid. It does not go to the end automatically.
I really have no idea what trackSectionLink is but you can figure it out by yourself! (Or I if your lazy!)
pathGamePlayData files
This is where the properties are used in paths.MinScale 0.75
MaxScale 0.95
EndSpeed occlude01 16
Danger pyramid_gate
SpawnRestrictive restrict
Occluded occlude01
Occluded pyramid
Unshootable pyramid
The EndSpeed slows down the spheres. To use it, put it at a far distance but not too close or else it will let the spheres move a normal speed.
PROTIP: The spheres automatically slow down at the danger.
The Occluded puts the spheres in like a shadow.
The Danger is the danger zone
The Unshootable is where you cannot shoot the spheres
The SpawnRestrictive I think restricts the spheres from spawning. (I am not sure!)
The scales are how the spheres get bigger or smaller (I think).
Map Infos
IT is just only one piece of string:MapName "#FeatheryHills1"
You can add the strings in data/locale/strings/English.txt
Pyramid Blocker Bugfix
Jan 1, 2018 2:04:58 GMT gs49 said:
The reason Pyramid blocker was absolutely broken with custom maps is the following reasons:1. Improper/Lack of a foreground mask
2. Improper distance between the last 2 vertices
So first of all, you must have a foreground mask of your map. If there isn't anything in the very front (therefore blocking the spheres) but the pyramid, your foreground mask should look like this if your map looks like this. This makes the blocker thingamajig actually appear, but improper distance between the last 2 vertices can result in the spheres stopping in the wrong place, creating a permanent blocker (which is insanely OP, and makes loosing impossible). I am still not sure what exactly needs to be done, but these are my last 3 vertices of the map. The dots represent the vertices, the orange line represents the pyramid gate, and the red line represents the pyramid path. Using the sphere cursor in N.O.D.E, I made the last 2 vertices around 35 pixels apart, (when before, it was around 5 times as much) and now the actual gameplay of the blocker works
I'll make an extra detailed tutorial if any of you don't get it.
FINAL PRODUCT
If you followed these well, then this is supposed to be the product:
Adding Music
The music is found in 'GameSounds.txt' where it contains this certain list:
Music "LevelMusicClassic"
{
file "music/theme_classic.ogg"
loop normal
}
Music "LevelMusicOnslaught"
{
file "music/theme_onslaught.ogg"
loop normal
}
Music "LevelMusicNile"
{
file "music/theme_nile.ogg"
loop normal
}
Music "DangerMusic"
{
file "music/Danger.ogg"
loop normal
}
Music "MenuMusic"
{
file "music/Menu.ogg"
loop normal
}
Sound "LevelIntro"
{
file "fx/level_intro.ogg"
}
Sound "LevelComplete"
{
file "fx/level_complete.ogg"
}
Sound "Collapse1"
{
file "fx/collapse_1.ogg"
}
Sound "Collapse2"
{
file "fx/collapse_2.ogg"
}
Sound "Collapse3"
{
file "fx/collapse_3.ogg"
}
Sound "Collapse4"
{
file "fx/collapse_4.ogg"
}
Sound "Collapse5"
{
file "fx/collapse_5.ogg"
}
Sound "CollapseScarab"
{
file "fx/collapse_scarab.ogg"
}
Sound "CollapseFireball"
{
file "fx/collapse_fireball.ogg"
}
Sound "CollapseColorCloud"
{
file "fx/collapse_colorcloud.ogg"
}
Sound "CollapseColorReplacer"
{
file "fx/collapse_color_replacer.ogg"
}
Sound "CollapseLightningBolt"
{
file "fx/collapse_lightningbolt.ogg"
}
Sound "CollapseBonusScarab"
{
file "fx/bonus_scarab_collapse.ogg"
}
Sound "CollideSpheresPath"
{
file "fx/collide_spheres_path.ogg"
}
Sound "CollideSpheresShotHit"
{
file "fx/collide_spheres_shot.ogg"
}
Sound "CollideSpheresShotMissed"
{
file "fx/collide_spheres_shot_bad.ogg"
}
Sound "CollideSpheresPathEnergy"
{
file "fx/collide_spheres_path_energy.ogg"
}
Sound "CollideSpheresShotHitEnergy"
{
file "fx/collide_spheres_shot_energy.ogg"
}
Sound "CollideSpheresShotMissedEnergy"
{
file "fx/collide_spheres_shot_bad_energy.ogg"
}
Sound "CollideSpheresPathGlass"
{
file "fx/collide_spheres_path_glass.ogg"
}
Sound "CollideSpheresShotHitGlass"
{
file "fx/collide_spheres_shot_glass.ogg"
}
Sound "CollideSpheresShotMissedGlass"
{
file "fx/collide_spheres_shot_bad_glass.ogg"
}
Sound "CollideSpheresPathWood"
{
file "fx/collide_spheres_path_wood.ogg"
}
Sound "CollideSpheresShotHitWood"
{
file "fx/collide_spheres_shot_wood.ogg"
}
Sound "CollideSpheresShotMissedWood"
{
file "fx/collide_spheres_shot_bad_wood.ogg"
}
Sound "ShooterReload"
{
file "fx/bullet_reload.ogg"
}
Sound "ShooterSwap"
{
file "fx/bullet_swap.ogg"
}
Sound "LaunchSphere"
{
file "fx/launch_sphere.ogg"
}
Sound "LaunchLightning"
{
file "fx/launch_lightning.ogg"
}
Sound "LaunchFireball"
{
file "fx/launch_fireball.ogg"
}
Sound "LaunchWild"
{
file "fx/launch_wild.ogg"
}
Sound "LaunchColorCloud"
{
file "fx/launch_colorcloud.ogg"
}
Sound "LaunchColorReplacer"
{
file "fx/launch_color_replacer.ogg"
}
Sound "SpheresRoll"
{
file "fx/spheres_roll.ogg"
loop normal
}
Sound "SpheresRollEnergy"
{
file "fx/spheres_roll_energy.ogg"
loop normal
}
Sound "SpheresRollGlass"
{
file "fx/spheres_roll_glass.ogg"
loop normal
}
Sound "SpheresRollWood"
{
file "fx/spheres_roll_wood.ogg"
loop normal
}
Sound "TrainSpawn"
{
file "fx/spawn_new_group.ogg"
}
Sound "GemSpawn1"
{
file "fx/spawn_gem_1.ogg"
}
Sound "GemSpawn2"
{
file "fx/spawn_gem_2.ogg"
}
Sound "GemSpawn3"
{
file "fx/spawn_gem_3.ogg"
}
Sound "SpawnCoin"
{
file "fx/spawn_coin.ogg"
}
Sound "SpawnPowerup"
{
file "fx/spawn_powerup.ogg"
}
Sound "CatchTreasure"
{
file "fx/catch_gem.ogg"
}
Sound "CatchCoin"
{
file "fx/catch_coin.ogg"
}
Sound "CatchPowerupReverse"
{
file "fx/catch_powerup_reverse.ogg"
}
Sound "CatchPowerupSlow"
{
file "fx/catch_powerup_slow.ogg"
}
Sound "CatchPowerupStop"
{
file "fx/catch_powerup_stop.ogg"
}
Sound "CatchPowerupWild"
{
file "fx/catch_powerup_wild.ogg"
}
Sound "CatchPowerupColorBomb"
{
file "fx/catch_powerup_color_bomb.ogg"
}
Sound "CatchPowerupColorReplacer"
{
file "fx/catch_powerup_color_replacer.ogg"
}
Sound "CatchPowerupSandstorm"
{
file "fx/catch_powerup_sandstorm.ogg"
}
Sound "CatchPowerupColorSort"
{
file "fx/catch_powerup_sort.ogg"
}
Sound "CatchPowerupFireball"
{
file "fx/catch_powerup_fireball.ogg"
}
Sound "CatchPowerupColorCloud"
{
file "fx/catch_powerup_color_cloud.ogg"
}
Sound "CatchPowerupSpeedShot"
{
file "fx/catch_powerup_shot_speed.ogg"
}
Sound "CatchPowerupLightning"
{
file "fx/catch_powerup_lightning.ogg"
}
Sound "CatchPowerupMatchHighlighter"
{
file "fx/catch_powerup_matcher.ogg"
}
Sound "CatchPowerupMatchReflector"
{
file "fx/catch_powerup_wild.ogg"
}
Sound "CatchPowerupNet"
{
file "fx/catch_powerup_net.ogg"
}
Sound "CatchPowerupTrainBlocker"
{
file "fx/catch_powerup_pyramid_gates.ogg"
}
Sound "CatchPowerupScorpion"
{
file "fx/catch_powerup_scorpion.ogg"
}
Sound "NetPowerupActive"
{
file "fx/net_powerup_active.ogg"
loop normal
}
Sound "ScorpionMove"
{
file "fx/scorpion_move.ogg"
}
Sound "CanopicJarExplode"
{
file "fx/canopic_jar_shot.ogg"
}
Sound "CanopicJarSpawn"
{
file "fx/canopic_jar_spawn.ogg"
}
Sound "CanopicJarLock"
{
file "fx/canopic_jar_lock.ogg"
}
Sound "GoldenScarabExplode"
{
file "fx/golden_scarab_shot.ogg"
}
Sound "GoldenScarabSpawn"
{
file "fx/golden_scarab_spawn.ogg"
}
Sound "MatchOne"
{
file "fx/match_1.ogg"
}
Sound "MatchTwo"
{
file "fx/match_2.ogg"
}
Sound "MatchThree"
{
file "fx/match_3.ogg"
}
Sound "UnlockedBonusLevel"
{
file "fx/bonus_unlocked.ogg"
}
Sound "PyramidGatesClose"
{
file "fx/pyramid_gates_close.ogg"
}
Sound "PyramidGatesOpen"
{
file "fx/pyramid_gates_open.ogg"
}
Sound "PushDialog"
{
file "ui/dialog_intro.ogg"
}
Sound "PopDialog"
{
file "ui/dialog_extro.ogg"
}
Sound "DoorTransitionClose"
{
file "ui/door_trans_in.ogg"
}
Sound "DoorTransitionOpen"
{
file "ui/door_trans_out.ogg"
}
Sound "ButtonHoverOn"
{
file "ui/button_highlight.ogg"
}
Sound "ButtonClick"
{
file "ui/button_click.ogg"
}
Sound "OnslaughtJarForm"
{
file "fx/onslaught_jar_form.ogg"
}
Sound "OnslaughtJarBreak"
{
file "fx/onslaught_jar_break.ogg"
}
Sound "TimerBell"
{
file "fx/timer_bell.ogg"
}
Sound "PyramidStageGrow"
{
file "ui/pyramid_grow.ogg"
}
Sound "BonusChestFanfare"
{
file "fx/high_score.ogg"
}
Sound "BonusChestFail"
{
file "fx/foul.ogg"
}
Sound "LevelFail"
{
file "fx/game_over.ogg"
}
Sound "FireworkExplode"
{
file "fx/firework_explode.ogg"
}
Sound "FireworkLaunch"
{
file "fx/firework_launch.ogg"
}
Sound "WarningHeartbeat"
{
file "fx/warning_heartbeat.ogg"
loop normal
}
Sound "ReflectorSpawn"
{
file "fx/reflector_spawn.ogg"
}
Sound "ReflectorBounce"
{
file "fx/reflector_bounce.ogg"
}
Sound "CloudStorm"
{
file "fx/cloudstorm.ogg"
}
Sound "Goose"
{
file "fx/hit_bird.ogg"
}
Sound "Tally"
{
file "fx/score_tally.ogg"
}
To add music, add a line then copy and paste the music file and then customize it. For example:
Add:Music "LevelMusicClassic"
{
file "music/theme_classic.ogg"
loop normal
}
Then Name whatever you want:
Music "YourName"
{
file "music/yourname.ogg"
loop normal
}
To make your music appear in your levels, open up the .lvl file in the levels folder. This file will contain this:
LevelMusic "LevelMusicClassic"
Match it to your music name and VIOLA! It appears!
Changing the hitpoint color
In the 'GamePieceFlavors.txt' there is this line in every sphere:
Tint for Black Tint 0 0 0
Changing the tint will cause the hitpoint color to change.
Adding/Deleting Frames of an animation
Adding or removing the frames of an animation will not cause the game to crash to go wrong. EVERYTHING works FINE! You can have up to infinite frames (of course it may crash the game.)
Whew, finally I can edit my posts.