Compare commits
3 Commits
fad0d8614e
...
2ff77e8f2a
Author | SHA1 | Date |
---|---|---|
Sara | 2ff77e8f2a | |
Sara | 666d417264 | |
Sara | e8808bfe49 |
|
@ -24,11 +24,12 @@
|
|||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="0.92747768"
|
||||
inkscape:cx="1998.9699"
|
||||
inkscape:cy="923.47236"
|
||||
inkscape:zoom="0.93240622"
|
||||
inkscape:cx="1521.8689"
|
||||
inkscape:cy="440.25875"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"><inkscape:page
|
||||
showgrid="false"
|
||||
inkscape:export-bgcolor="#ffffffff"><inkscape:page
|
||||
x="0"
|
||||
y="0"
|
||||
width="297"
|
||||
|
@ -249,403 +250,396 @@
|
|||
style="font-size:16px;line-height:1;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';text-decoration-color:#000000;white-space:pre;shape-inside:url(#rect1);shape-padding:31.8441;display:inline;fill:#1b1b1b;stroke-width:3.00094;stroke-linejoin:round"><tspan
|
||||
x="31.84375"
|
||||
y="44.32375"
|
||||
id="tspan4"><tspan
|
||||
id="tspan10"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan1">Concept</tspan><tspan
|
||||
id="tspan2">Concept</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan3">
|
||||
id="tspan9">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="60.32375"
|
||||
id="tspan6"><tspan
|
||||
id="tspan12"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan5">3D fixed camera dungeon crawler where the player is placed in a randomly selected sequence of rooms
|
||||
id="tspan11">3D fixed camera dungeon crawler where the player is placed in a randomly selected sequence of rooms
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="76.32375"
|
||||
id="tspan88"><tspan
|
||||
id="tspan15"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan7">and asked to clear as many rooms as possible within a 5min timeframe.
|
||||
id="tspan13">and asked to clear as many rooms as possible within a 5min timeframe.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="92.32375"
|
||||
id="tspan129"><tspan
|
||||
id="tspan17"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan122">
|
||||
id="tspan16">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="108.32375"
|
||||
id="tspan141"><tspan
|
||||
id="tspan19"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan131">The environments are an overgrown forest ruin made using a combination of the Nature pack and Prototype assets.
|
||||
id="tspan18">The environments are an overgrown forest ruin made using a combination of the Nature pack and Prototype assets.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="124.32375"
|
||||
id="tspan143"><tspan
|
||||
id="tspan21"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan142">
|
||||
id="tspan20">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="140.32375"
|
||||
id="tspan155"><tspan
|
||||
id="tspan25"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan150">The </tspan><tspan
|
||||
id="tspan22">The </tspan><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan153">player</tspan><tspan
|
||||
id="tspan23">player</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan154"> can move horizontally with the Joystick or WASD. The player has two weapons which
|
||||
id="tspan24"> can move horizontally with the Joystick or WASD. The player has two weapons which
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="156.32375"
|
||||
id="tspan157"><tspan
|
||||
id="tspan27"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan156">bound to two buttons (left/right mousebutton or X/Y).
|
||||
id="tspan26">bound to two buttons (left/right mousebutton or X/Y).
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="172.32375"
|
||||
id="tspan159"><tspan
|
||||
id="tspan29"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan158">
|
||||
id="tspan28">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="188.32375"
|
||||
id="tspan161"><tspan
|
||||
id="tspan31"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan160">
|
||||
id="tspan30">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="204.32375"
|
||||
id="tspan163"><tspan
|
||||
id="tspan33"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan162">
|
||||
id="tspan32">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="220.32375"
|
||||
id="tspan165"><tspan
|
||||
id="tspan35"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan164">
|
||||
id="tspan34">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="236.32375"
|
||||
id="tspan167"><tspan
|
||||
id="tspan37"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan166">
|
||||
id="tspan36">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="252.32375"
|
||||
id="tspan169"><tspan
|
||||
id="tspan39"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan168">
|
||||
id="tspan38">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="268.32375"
|
||||
id="tspan171"><tspan
|
||||
id="tspan41"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan170">There are three kinds of enemies.
|
||||
id="tspan40">There are three kinds of enemies.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="284.32375"
|
||||
id="tspan174"><tspan
|
||||
id="tspan44"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan172">"Fodder"</tspan><tspan
|
||||
id="tspan42">"Fodder"</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan173"> that are slow and die easilly, but if they do end up hitting you they hurt a lot.
|
||||
id="tspan43"> that are slow and die easilly, but if they do end up hitting you they hurt a lot.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="300.32375"
|
||||
id="tspan176"><tspan
|
||||
id="tspan46"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan175">
|
||||
id="tspan45">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="316.32375"
|
||||
id="tspan178"><tspan
|
||||
id="tspan48"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan177">
|
||||
id="tspan47">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="332.32375"
|
||||
id="tspan180"><tspan
|
||||
id="tspan50"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan179">
|
||||
id="tspan49">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="348.32375"
|
||||
id="tspan182"><tspan
|
||||
id="tspan52"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan181">
|
||||
id="tspan51">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="364.32375"
|
||||
id="tspan185"><tspan
|
||||
id="tspan55"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan183">"Tanks"</tspan><tspan
|
||||
id="tspan53">"Tanks"</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan184"> which don't hit very hard but survive for longer.
|
||||
id="tspan54"> which don't hit very hard but survive for longer.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="380.32375"
|
||||
id="tspan187"><tspan
|
||||
id="tspan57"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan186">
|
||||
id="tspan56">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="396.32375"
|
||||
id="tspan189"><tspan
|
||||
id="tspan59"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan188">
|
||||
id="tspan58">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="412.32375"
|
||||
id="tspan191"><tspan
|
||||
id="tspan61"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan190">
|
||||
id="tspan60">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="428.32375"
|
||||
id="tspan194"><tspan
|
||||
id="tspan64"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan192">"Ranged"</tspan><tspan
|
||||
id="tspan62">"Ranged"</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan193"> which, like fodder have low health, low speed, and like the tank low damage, but can hit from a range.
|
||||
id="tspan63"> which, like fodder have low health, low speed, and like the tank low damage, but can hit from a range.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="444.32375"
|
||||
id="tspan196"><tspan
|
||||
id="tspan66"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan195">
|
||||
id="tspan65">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="460.32375"
|
||||
id="tspan198"><tspan
|
||||
id="tspan68"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan197">
|
||||
id="tspan67">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="476.32375"
|
||||
id="tspan200"><tspan
|
||||
id="tspan70"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan199">
|
||||
id="tspan69">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="492.32375"
|
||||
id="tspan202"><tspan
|
||||
id="tspan72"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan201">There is a "Berserk" powerup which will give the player the power to defeat enemies in one hit for a few seconds, but when it ends it </tspan></tspan><tspan
|
||||
id="tspan71">There is a "Berserk" powerup which will give the player the power to defeat enemies in one hit for a few seconds, but when it ends it </tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="508.32375"
|
||||
id="tspan204"><tspan
|
||||
id="tspan74"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan203">leaves the player unable to act for a second.
|
||||
id="tspan73">leaves the player unable to act for a second.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="524.32375"
|
||||
id="tspan206"><tspan
|
||||
id="tspan76"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan205">Meaning that if the player fails to clear the room in the "berserk" time, they'll take a lot of hits.
|
||||
id="tspan75">Meaning that if the player fails to clear the room in the "berserk" time, they'll take a lot of hits.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="540.32375"
|
||||
id="tspan208"><tspan
|
||||
id="tspan78"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan207">
|
||||
id="tspan77">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="556.32375"
|
||||
id="tspan210"><tspan
|
||||
id="tspan80"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan209">There is a "speedup" powerup, which will increase the animation/movement speed for the player but drains health while active (always </tspan></tspan><tspan
|
||||
id="tspan79">There is a "speedup" powerup, which will increase the animation/movement speed for the player but drains health while active (always </tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="572.32375"
|
||||
id="tspan212"><tspan
|
||||
id="tspan84"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan211">leaving a small amount to avoid frustrating deaths).</tspan></tspan></text><text
|
||||
id="tspan81">leaving a small amount to avoid frustrating deaths).</tspan></tspan></text><text
|
||||
xml:space="preserve"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-5.8858161,-9.7341241)"
|
||||
id="text3"
|
||||
style="font-size:16px;line-height:1;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans, Normal';text-decoration-color:#000000;white-space:pre;shape-inside:url(#rect3);shape-padding:23.7099;display:inline;fill:#1b1b1b;stroke-width:3.00094;stroke-linejoin:round"><tspan
|
||||
x="1205.7305"
|
||||
y="71.800313"
|
||||
id="tspan214"><tspan
|
||||
id="tspan87"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan213">Player:
|
||||
id="tspan85">Player:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="87.800313"
|
||||
id="tspan215">- A warrior with an axe and a sword.
|
||||
id="tspan88">- A warrior with an axe and a sword.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="103.80031"
|
||||
id="tspan216">
|
||||
id="tspan89">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="119.80031"
|
||||
id="tspan218"><tspan
|
||||
id="tspan91"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan217">Objectives:
|
||||
id="tspan90">Objectives:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="135.80031"
|
||||
id="tspan220">- Defeat all enemies.<tspan
|
||||
id="tspan94">- Defeat all enemies.<tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan219">
|
||||
id="tspan93">
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="151.80031"
|
||||
id="tspan221">- Move to the next room.
|
||||
id="tspan95">- Move to the next room.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="167.80031"
|
||||
id="tspan222">
|
||||
id="tspan96">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="183.80031"
|
||||
id="tspan224"><tspan
|
||||
id="tspan99"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan223">Resources:
|
||||
id="tspan98">Resources:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="199.80031"
|
||||
id="tspan225">- Health, depending on what they get hit by, the player can take 4-7 hits
|
||||
id="tspan100">- Health, depending on what they get hit by, the player can take 4-7 hits
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="215.80031"
|
||||
id="tspan226">- Time, 5 minutes
|
||||
id="tspan101">- Time, 5 minutes
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="231.80031"
|
||||
id="tspan227">
|
||||
id="tspan102">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="247.80031"
|
||||
id="tspan229"><tspan
|
||||
id="tspan104"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan228">Mechanics:
|
||||
id="tspan103">Mechanics:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="263.80031"
|
||||
id="tspan230">- Short/light/weak attack with the axe
|
||||
id="tspan105">- Short/light/weak attack with the axe
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="279.80031"
|
||||
id="tspan231">- Long/heavy/strong attack with the sword
|
||||
id="tspan106">- Long/heavy/strong attack with the sword
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="295.80031"
|
||||
id="tspan232">- Berserk powerup that has a long vulnerablility period at the end
|
||||
id="tspan108">- Berserk powerup that has a long vulnerablility period at the end
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="311.80031"
|
||||
id="tspan233">- Speed powerup that saps in the ballpark of 30% of the player's max health
|
||||
id="tspan109">- Speed powerup that saps in the ballpark of 30% of the player's max health
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="327.80031"
|
||||
id="tspan234">- The game timer ticks down to game over
|
||||
id="tspan110">- The game timer ticks down to game over
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="343.80031"
|
||||
id="tspan235">- Rooms will spawn enemies in randomly selected waves.
|
||||
id="tspan111">- Rooms will spawn enemies in randomly selected waves.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="359.80031"
|
||||
id="tspan236">- Progress requires killing all waves of enemies
|
||||
id="tspan112">- Progress requires killing all waves of enemies
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="375.80031"
|
||||
id="tspan237">
|
||||
id="tspan113">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="391.80031"
|
||||
id="tspan239"><tspan
|
||||
id="tspan116"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan238">Dynamics:
|
||||
id="tspan114">Dynamics:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="407.80031"
|
||||
id="tspan240">- The player has to decide whether to short or long attack based on their windup/recovery durations.
|
||||
id="tspan117">- The player has to decide whether to short or long attack based on their windup/recovery durations.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="423.80031"
|
||||
id="tspan241"> - deciding to use a long when you shouldn't would lead to getting hit during windup (canceling the action) or during winddown.
|
||||
id="tspan118"> - deciding to use a long when you shouldn't would lead to getting hit during windup (canceling the action) or during winddown.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="439.80031"
|
||||
id="tspan242"> - But a light attack could fail to eliminate a threat in time.
|
||||
id="tspan119"> - But a light attack could fail to eliminate a threat in time.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="455.80031"
|
||||
id="tspan243">- The player can make heavy attacks more useful by finding a speedup, but that goes at the cost of health.
|
||||
id="tspan120">- The player can make heavy attacks more useful by finding a speedup, but that goes at the cost of health.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="471.80031"
|
||||
id="tspan244">- The player can make light attacks more useful by finding a berserk powerup, but at the risk of leaving themselves exposed after it fails.
|
||||
id="tspan121">- The player can make light attacks more useful by finding a berserk powerup, but at the risk of leaving themselves exposed after it fails.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="487.80031"
|
||||
id="tspan245">
|
||||
id="tspan122">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="503.80031"
|
||||
id="tspan247"><tspan
|
||||
id="tspan124"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan246">Conflict:</tspan>
|
||||
id="tspan123">Conflict:</tspan>
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="519.80031"
|
||||
id="tspan248">- The player cannot progress without defeating enemies.
|
||||
id="tspan125">- The player cannot progress without defeating enemies.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="535.80031"
|
||||
id="tspan249">- The enemies will attack the player.
|
||||
id="tspan126">- The enemies will attack the player.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="551.80031"
|
||||
id="tspan250">
|
||||
id="tspan127">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="567.80031"
|
||||
id="tspan252"><tspan
|
||||
id="tspan129"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan251">Boundaries:
|
||||
id="tspan128">Boundaries:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="583.80031"
|
||||
id="tspan253">- The player cannot leave the room they're in until all enemies are defeated.
|
||||
id="tspan130">- The player cannot leave the room they're in until all enemies are defeated.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="599.80031"
|
||||
id="tspan254">- The player cannot stop an attack until it's animation is finished.
|
||||
id="tspan131">- The player cannot stop an attack until it's animation is finished.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="615.80031"
|
||||
id="tspan255">
|
||||
id="tspan132">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="631.80031"
|
||||
id="tspan257"><tspan
|
||||
id="tspan134"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan256">Outcome:
|
||||
id="tspan133">Outcome:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="647.80031"
|
||||
id="tspan259">- The game ends when the player runs out of time or health<tspan
|
||||
id="tspan136">- The game ends when the player runs out of time or health<tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan258">
|
||||
id="tspan135">
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="663.80031"
|
||||
id="tspan260">- The player is scored based on the number of enemies defeated
|
||||
id="tspan137">- The player is scored based on the number of enemies defeated
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="679.80031"
|
||||
id="tspan261">- After the game end screen, the game is reset for the next person. </tspan></text><image
|
||||
width="13.731021"
|
||||
height="31.629169"
|
||||
preserveAspectRatio="none"
|
||||
xlink:href="../../../../Pictures/Screenshots/2024-02-01_10-02-1706780218.png"
|
||||
id="image1"
|
||||
x="10.043767"
|
||||
y="33.049828" /><image
|
||||
id="tspan138">- After the game end screen, the game is reset for the next person. </tspan></text><image
|
||||
width="13.64728"
|
||||
height="27.455114"
|
||||
preserveAspectRatio="none"
|
||||
|
@ -962,6 +956,8 @@
|
|||
style="fill:none;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker126)"
|
||||
d="m 571.78836,168.37684 c 0,0 -1.4157,-1.41572 -1.4157,-3.87 0,-2.45428 1.51037,-3.96442 3.87,-4.05883 2.35961,-0.0944 4.43622,1.88779 4.43622,3.87 0,1.98221 -1.41571,3.77558 -1.41571,3.77558"
|
||||
id="path125" /><g
|
||||
id="g5"
|
||||
transform="translate(21.068403,-44.544624)"><g
|
||||
id="g151"
|
||||
transform="translate(30.606929,3.6243846)"><g
|
||||
id="g150"
|
||||
|
@ -1046,7 +1042,8 @@
|
|||
id="tspan148"
|
||||
style="stroke-width:0.5"
|
||||
x="510.13458"
|
||||
y="123.89542">Hit time</tspan></text></g><text
|
||||
y="123.89542">Hit time</tspan></text></g><g
|
||||
id="g4"><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="477.50571"
|
||||
|
@ -1068,7 +1065,7 @@
|
|||
id="tspan149-4"
|
||||
style="font-weight:bold;fill:#000000;stroke-width:0.5"
|
||||
x="515.86322"
|
||||
y="136.34253">light</tspan></text><text
|
||||
y="136.34253">light</tspan></text></g></g><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="500.92786"
|
||||
|
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 46 KiB |
Binary file not shown.
|
@ -0,0 +1,26 @@
|
|||
[remap]
|
||||
|
||||
importer="2d_array_texture"
|
||||
type="CompressedTexture2DArray"
|
||||
uid="uid://dm2lhgblxb8ss"
|
||||
path="res://.godot/imported/room001.exr-53d6be4a213eef0bcecf8bf0ea4f5cd9.ctexarray"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Levels/Light/room001.exr"
|
||||
dest_files=["res://.godot/imported/room001.exr-53d6be4a213eef0bcecf8bf0ea4f5cd9.ctexarray"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=3
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/channel_pack=1
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
slices/horizontal=1
|
||||
slices/vertical=8
|
Binary file not shown.
|
@ -1,26 +1,126 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://3qb27d8vkjku"]
|
||||
[gd_scene load_steps=13 format=3 uid="uid://3qb27d8vkjku"]
|
||||
|
||||
[ext_resource type="LightmapGIData" uid="uid://cfli7rodl51qd" path="res://Levels/Light/room001.lmbake" id="1_vp3o5"]
|
||||
[ext_resource type="PackedScene" uid="uid://blod06auxvonj" path="res://Models/Environments/SM_Buildings_Floor_5x5_01.fbx" id="1_yoy7t"]
|
||||
[ext_resource type="PackedScene" uid="uid://dex5ugontg3g1" path="res://Models/Props/SM_Plant_Fern_01.fbx" id="2_w1kt7"]
|
||||
[ext_resource type="PackedScene" uid="uid://7f1i4no3h2h5" path="res://Models/Props/SM_Plant_Fern_02.fbx" id="3_tpbl0"]
|
||||
[ext_resource type="PackedScene" uid="uid://dsym0ndxgp01" path="res://Models/Props/SM_Tree_Dead_02.fbx" id="4_y48ls"]
|
||||
[ext_resource type="PackedScene" uid="uid://sf2ippantsrx" path="res://Models/Props/SM_Prop_Pillar_Broken_Moss_01.fbx" id="5_qvwse"]
|
||||
[ext_resource type="PackedScene" uid="uid://55s1at5inmv3" path="res://Models/Props/SM_Rock_Wall_01.fbx" id="6_m0jjr"]
|
||||
[ext_resource type="PackedScene" uid="uid://up6utdya5pxh" path="res://Models/Props/SM_Prop_StoneWall_01.fbx" id="7_t3wqq"]
|
||||
[ext_resource type="PackedScene" uid="uid://vgxi3xp3ces5" path="res://Models/Sky/MountainSkybox.fbx" id="9_ypm82"]
|
||||
|
||||
[sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_2kikw"]
|
||||
|
||||
[sub_resource type="Sky" id="Sky_g8k5h"]
|
||||
sky_material = SubResource("PhysicalSkyMaterial_2kikw")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_po184"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_g8k5h")
|
||||
|
||||
[node name="Level" type="Level"]
|
||||
|
||||
[node name="Entrance" type="Entrance" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08729, -0.00710487, -4.41459)
|
||||
|
||||
[node name="Root Scene" parent="." instance=ExtResource("1_yoy7t")]
|
||||
transform = Transform3D(0.932476, 0, 0.361234, 0, 1, 0, -0.361234, 0, 0.932476, 2.86726, -0.000884401, -6.46443)
|
||||
|
||||
[node name="Root Scene2" parent="." instance=ExtResource("1_yoy7t")]
|
||||
transform = Transform3D(0.932476, 0, 0.361234, 0, 1, 0, -0.361234, 0, 0.932476, 4.67343, -0.000884401, -1.80205)
|
||||
|
||||
[node name="Root Scene3" parent="." instance=ExtResource("1_yoy7t")]
|
||||
transform = Transform3D(0.932476, 0, 0.361234, 0, 1, 0, -0.361234, 0, 0.932476, -1.79511, -0.000884401, -4.65826)
|
||||
|
||||
[node name="Root Scene4" parent="." instance=ExtResource("1_yoy7t")]
|
||||
transform = Transform3D(0.932476, 0, 0.361234, 0, 1, 0, -0.361234, 0, 0.932476, 0.0110639, -0.000884401, 0.00411797)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.854549, 0.51937, 0, -0.51937, 0.854549, -3.57628e-07, 4.60657, 5.90589)
|
||||
transform = Transform3D(0.972427, 0.121156, -0.199266, 7.15111e-09, 0.854459, 0.519519, 0.233208, -0.505194, 0.830899, -1.07345, 5.03391, 6.47806)
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(0.747775, -0.341732, 0.569255, 0, 0.857374, 0.514694, -0.663952, -0.384875, 0.641123, 0, 1.75292, 0)
|
||||
transform = Transform3D(0.479871, -0.451561, 0.752208, 3.58187e-08, 0.857374, 0.514694, -0.877339, -0.246987, 0.411429, 0, 1.75292, 0)
|
||||
light_energy = 1.831
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="Entrance" type="Entrance" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.02647, -0.00710487, -0.181055)
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_po184")
|
||||
|
||||
[node name="LightmapGI" type="LightmapGI" parent="WorldEnvironment"]
|
||||
light_data = ExtResource("1_vp3o5")
|
||||
|
||||
[node name="Root Scene" parent="WorldEnvironment/LightmapGI" instance=ExtResource("1_yoy7t")]
|
||||
transform = Transform3D(0.932476, 0, 0.361234, 0, 1, 0, -0.361234, 0, 0.932476, 2.86726, -0.000884401, -6.46443)
|
||||
|
||||
[node name="Root Scene2" parent="WorldEnvironment/LightmapGI" instance=ExtResource("1_yoy7t")]
|
||||
transform = Transform3D(0.932476, 0, 0.361234, 0, 1, 0, -0.361234, 0, 0.932476, 4.67343, -0.000884401, -1.80205)
|
||||
|
||||
[node name="Root Scene3" parent="WorldEnvironment/LightmapGI" instance=ExtResource("1_yoy7t")]
|
||||
transform = Transform3D(0.932476, 0, 0.361234, 0, 1, 0, -0.361234, 0, 0.932476, -1.79511, -0.000884401, -4.65826)
|
||||
|
||||
[node name="Root Scene4" parent="WorldEnvironment/LightmapGI" instance=ExtResource("1_yoy7t")]
|
||||
transform = Transform3D(0.932476, 0, 0.361234, 0, 1, 0, -0.361234, 0, 0.932476, 0.0110639, -0.000884401, 0.00411797)
|
||||
|
||||
[node name="Root Scene5" parent="WorldEnvironment/LightmapGI" instance=ExtResource("2_w1kt7")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.96603, 0, 2.62085)
|
||||
|
||||
[node name="Root Scene6" parent="WorldEnvironment/LightmapGI" instance=ExtResource("3_tpbl0")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.43048, 2.38419e-07, 2.1495)
|
||||
|
||||
[node name="Root Scene7" parent="WorldEnvironment/LightmapGI" instance=ExtResource("2_w1kt7")]
|
||||
transform = Transform3D(-0.281437, 0, -0.95958, 0, 1, 0, 0.95958, 0, -0.281437, 5.04233, 2.38419e-07, 1.64983)
|
||||
|
||||
[node name="Root Scene8" parent="WorldEnvironment/LightmapGI" instance=ExtResource("4_y48ls")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.30777, 0, 2.30291)
|
||||
|
||||
[node name="Root Scene9" parent="WorldEnvironment/LightmapGI" instance=ExtResource("5_qvwse")]
|
||||
transform = Transform3D(-0.0372541, 0, 0.999306, 0, 1, 0, -0.999306, 0, -0.0372541, 4.17166, 0, 2.08067)
|
||||
|
||||
[node name="Root Scene11" parent="WorldEnvironment/LightmapGI" instance=ExtResource("6_m0jjr")]
|
||||
transform = Transform3D(0.945029, 0, 0.326987, 0, 1, 0, -0.326987, 0, 0.945029, 5.6945, 4.76837e-07, 0.76205)
|
||||
|
||||
[node name="Root Scene12" parent="WorldEnvironment/LightmapGI" instance=ExtResource("6_m0jjr")]
|
||||
transform = Transform3D(-0.997458, 0, -0.0712536, 0, 1, 0, 0.0712536, 0, -0.997458, 5.04292, 0, -2.4426)
|
||||
|
||||
[node name="Root Scene13" parent="WorldEnvironment/LightmapGI" instance=ExtResource("6_m0jjr")]
|
||||
transform = Transform3D(-0.518714, 0, -0.854948, 0, 1, 0, 0.854948, 0, -0.518714, 3.71733, 4.76837e-07, -4.95217)
|
||||
|
||||
[node name="Root Scene14" parent="WorldEnvironment/LightmapGI" instance=ExtResource("6_m0jjr")]
|
||||
transform = Transform3D(-0.894373, -0.0747678, -0.441029, 0.0303719, 0.973507, -0.226631, 0.44629, -0.216087, -0.868408, 3.9715, -0.68129, -3.51969)
|
||||
|
||||
[node name="Root Scene25" parent="WorldEnvironment/LightmapGI" instance=ExtResource("6_m0jjr")]
|
||||
transform = Transform3D(-0.0393825, -0.103263, 0.445281, 0.436472, 0.124245, 0.0674161, -0.13576, 0.429406, 0.0875742, 1.43969, -0.218692, 3.0008)
|
||||
|
||||
[node name="Root Scene26" parent="WorldEnvironment/LightmapGI" instance=ExtResource("6_m0jjr")]
|
||||
transform = Transform3D(-0.12461, 0.541718, -0.831273, 0.965849, -0.125595, -0.226631, -0.227174, -0.831125, -0.507567, 0.256589, 0.226632, 2.59454)
|
||||
|
||||
[node name="Root Scene15" parent="WorldEnvironment/LightmapGI" instance=ExtResource("6_m0jjr")]
|
||||
transform = Transform3D(-0.881662, -0.398897, -0.252097, 0.290335, -0.0374126, -0.956194, 0.371991, -0.916232, 0.148799, 4.91621, 1.20005, -3.90934)
|
||||
|
||||
[node name="Root Scene16" parent="WorldEnvironment/LightmapGI" instance=ExtResource("6_m0jjr")]
|
||||
transform = Transform3D(-1.27246, -0.717393, -0.422044, 0.791529, -0.804545, -1.01888, 0.257403, -1.07237, 1.04675, 6.55017, 2.03872, -2.07892)
|
||||
|
||||
[node name="Root Scene10" parent="WorldEnvironment/LightmapGI" instance=ExtResource("7_t3wqq")]
|
||||
transform = Transform3D(0.985559, 0, 0.169332, 0, 1, 0, -0.169332, 0, 0.985559, 2.2975, 0, -4.98931)
|
||||
|
||||
[node name="Root Scene17" parent="WorldEnvironment/LightmapGI" instance=ExtResource("7_t3wqq")]
|
||||
transform = Transform3D(0.86674, 0, 0.49876, 0, 1, 0, -0.49876, 0, 0.86674, -1.89462, 0, -4.39425)
|
||||
|
||||
[node name="Root Scene18" parent="WorldEnvironment/LightmapGI" instance=ExtResource("7_t3wqq")]
|
||||
transform = Transform3D(0.985559, 0, 0.169332, 0, 1, 0, -0.169332, 0, 0.985559, 2.2975, 1, -4.98931)
|
||||
|
||||
[node name="Root Scene19" parent="WorldEnvironment/LightmapGI" instance=ExtResource("7_t3wqq")]
|
||||
transform = Transform3D(0.86674, 0, 0.49876, 0, 1, 0, -0.49876, 0, 0.86674, -1.89462, 1, -4.39425)
|
||||
|
||||
[node name="Root Scene20" parent="WorldEnvironment/LightmapGI" instance=ExtResource("7_t3wqq")]
|
||||
transform = Transform3D(0.985559, 0, 0.169332, 0, 1, 0, -0.169332, 0, 0.985559, 2.2975, 2, -4.98931)
|
||||
|
||||
[node name="Root Scene22" parent="WorldEnvironment/LightmapGI" instance=ExtResource("7_t3wqq")]
|
||||
transform = Transform3D(0.985559, 0, 0.169332, 0, 1, 0, -0.169332, 0, 0.985559, 7.14722, 0, -5.80763)
|
||||
|
||||
[node name="Root Scene23" parent="WorldEnvironment/LightmapGI" instance=ExtResource("7_t3wqq")]
|
||||
transform = Transform3D(0.985559, 0, 0.169332, 0, 1, 0, -0.169332, 0, 0.985559, 7.14722, 1, -5.80763)
|
||||
|
||||
[node name="Root Scene24" parent="WorldEnvironment/LightmapGI" instance=ExtResource("7_t3wqq")]
|
||||
transform = Transform3D(0.985559, 0, 0.169332, 0, 1, 0, -0.169332, 0, 0.985559, 7.14722, 2, -5.80763)
|
||||
|
||||
[node name="Root Scene21" parent="WorldEnvironment/LightmapGI" instance=ExtResource("7_t3wqq")]
|
||||
transform = Transform3D(0.86674, 0, 0.49876, 0, 1, 0, -0.49876, 0, 0.86674, -1.89462, 2, -4.39425)
|
||||
|
||||
[node name="Root Scene27" parent="WorldEnvironment/LightmapGI" instance=ExtResource("2_w1kt7")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.124688, 0, 3.40266)
|
||||
|
||||
[node name="Root Scene28" parent="WorldEnvironment/LightmapGI" instance=ExtResource("3_tpbl0")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.629966, 0, 4.02042)
|
||||
|
||||
[node name="Root Scene" parent="WorldEnvironment" instance=ExtResource("9_ypm82")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.568564, -0.711053, -0.05379)
|
||||
|
|
BIN
godot/Models/Characters/Animations/BasicMotions@Idle01 - Idle02.fbx (Stored with Git LFS)
Normal file
BIN
godot/Models/Characters/Animations/BasicMotions@Idle01 - Idle02.fbx (Stored with Git LFS)
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -38,6 +38,13 @@ _subresources={
|
|||
"lambert3": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert3.tres"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"PATH:RootNode/Skeleton3D": {
|
||||
"retarget/bone_map": Object(BoneMap,"resource_local_to_scene":false,"resource_name":"","profile":Object(SkeletonProfileHumanoid,"resource_local_to_scene":false,"resource_name":"","root_bone":&"Root","scale_base_bone":&"Hips","group_size":4,"bone_size":56,"script":null)
|
||||
,"bonemap":null,"bone_map/Root":&"Root","bone_map/Hips":&"Hips","bone_map/Spine":&"Spine_01","bone_map/Chest":&"Spine_02","bone_map/UpperChest":&"Spine_03","bone_map/Neck":&"Neck","bone_map/Head":&"Head","bone_map/LeftEye":&"","bone_map/RightEye":&"","bone_map/Jaw":&"","bone_map/LeftShoulder":&"Clavicle_L","bone_map/LeftUpperArm":&"Shoulder_L","bone_map/LeftLowerArm":&"Elbow_L","bone_map/LeftHand":&"Hand_L","bone_map/LeftThumbMetacarpal":&"Thumb_01","bone_map/LeftThumbProximal":&"Thumb_02","bone_map/LeftThumbDistal":&"Thumb_03","bone_map/LeftIndexProximal":&"IndexFinger_01","bone_map/LeftIndexIntermediate":&"IndexFinger_02","bone_map/LeftIndexDistal":&"IndexFinger_03","bone_map/LeftMiddleProximal":&"","bone_map/LeftMiddleIntermediate":&"","bone_map/LeftMiddleDistal":&"","bone_map/LeftRingProximal":&"Finger_01","bone_map/LeftRingIntermediate":&"Finger_02","bone_map/LeftRingDistal":&"Finger_03","bone_map/LeftLittleProximal":&"","bone_map/LeftLittleIntermediate":&"","bone_map/LeftLittleDistal":&"","bone_map/RightShoulder":&"Clavicle_R","bone_map/RightUpperArm":&"Shoulder_R","bone_map/RightLowerArm":&"Elbow_R","bone_map/RightHand":&"Hand_R","bone_map/RightThumbMetacarpal":&"Thumb_01_2","bone_map/RightThumbProximal":&"Thumb_02_2","bone_map/RightThumbDistal":&"Thumb_03_2","bone_map/RightIndexProximal":&"IndexFinger_01_2","bone_map/RightIndexIntermediate":&"IndexFinger_02_2","bone_map/RightIndexDistal":&"IndexFinger_03_2","bone_map/RightMiddleProximal":&"","bone_map/RightMiddleIntermediate":&"","bone_map/RightMiddleDistal":&"","bone_map/RightRingProximal":&"Finger_01_2","bone_map/RightRingIntermediate":&"Finger_02_2","bone_map/RightRingDistal":&"Finger_03_2","bone_map/RightLittleProximal":&"","bone_map/RightLittleIntermediate":&"","bone_map/RightLittleDistal":&"","bone_map/LeftUpperLeg":&"UpperLeg_L","bone_map/LeftLowerLeg":&"LowerLeg_L","bone_map/LeftFoot":&"Ankle_L","bone_map/LeftToes":&"Toes_L","bone_map/RightUpperLeg":&"UpperLeg_R","bone_map/RightLowerLeg":&"LowerLeg_R","bone_map/RightFoot":&"Ankle_R","bone_map/RightToes":&"Toes_R","script":null)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
[gd_resource type="BoneMap" load_steps=2 format=3 uid="uid://dqydbxj1rggyb"]
|
||||
|
||||
[sub_resource type="SkeletonProfileHumanoid" id="SkeletonProfileHumanoid_7s4cy"]
|
||||
|
||||
[resource]
|
||||
profile = SubResource("SkeletonProfileHumanoid_7s4cy")
|
||||
bonemap = null
|
||||
bone_map/Root = &"root"
|
||||
bone_map/Hips = &"B-hips"
|
||||
bone_map/Spine = &"B-spine"
|
||||
bone_map/Chest = &"B-chest"
|
||||
bone_map/UpperChest = &"B-upperChest"
|
||||
bone_map/Neck = &"B-neck"
|
||||
bone_map/Head = &"B-head"
|
||||
bone_map/LeftEye = &""
|
||||
bone_map/RightEye = &""
|
||||
bone_map/Jaw = &""
|
||||
bone_map/LeftShoulder = &"B-shoulder_L"
|
||||
bone_map/LeftUpperArm = &"B-upper_arm_L"
|
||||
bone_map/LeftLowerArm = &"B-forearm_L"
|
||||
bone_map/LeftHand = &"B-hand_L"
|
||||
bone_map/LeftThumbMetacarpal = &"B-thumb_01_L"
|
||||
bone_map/LeftThumbProximal = &"B-thumb_02_L"
|
||||
bone_map/LeftThumbDistal = &"B-thumb_03_L"
|
||||
bone_map/LeftIndexProximal = &"B-f_index_01_L"
|
||||
bone_map/LeftIndexIntermediate = &"B-f_index_02_L"
|
||||
bone_map/LeftIndexDistal = &"B-f_index_03_L"
|
||||
bone_map/LeftMiddleProximal = &"B-f_middle_01_L"
|
||||
bone_map/LeftMiddleIntermediate = &"B-f_middle_02_L"
|
||||
bone_map/LeftMiddleDistal = &"B-f_middle_03_L"
|
||||
bone_map/LeftRingProximal = &"B-f_ring_01_L"
|
||||
bone_map/LeftRingIntermediate = &"B-f_ring_02_L"
|
||||
bone_map/LeftRingDistal = &"B-f_ring_03_L"
|
||||
bone_map/LeftLittleProximal = &"B-f_pinky_01_L"
|
||||
bone_map/LeftLittleIntermediate = &"B-f_pinky_02_L"
|
||||
bone_map/LeftLittleDistal = &"B-f_pinky_03_L"
|
||||
bone_map/RightShoulder = &"B-shoulder_R"
|
||||
bone_map/RightUpperArm = &"B-upper_arm_R"
|
||||
bone_map/RightLowerArm = &"B-forearm_R"
|
||||
bone_map/RightHand = &"B-hand_R"
|
||||
bone_map/RightThumbMetacarpal = &"B-thumb_01_R"
|
||||
bone_map/RightThumbProximal = &"B-thumb_02_R"
|
||||
bone_map/RightThumbDistal = &"B-thumb_03_R"
|
||||
bone_map/RightIndexProximal = &"B-f_index_01_R"
|
||||
bone_map/RightIndexIntermediate = &"B-f_index_02_R"
|
||||
bone_map/RightIndexDistal = &"B-f_index_03_R"
|
||||
bone_map/RightMiddleProximal = &"B-f_middle_01_R"
|
||||
bone_map/RightMiddleIntermediate = &"B-f_middle_02_R"
|
||||
bone_map/RightMiddleDistal = &"B-f_middle_03_R"
|
||||
bone_map/RightRingProximal = &"B-f_ring_01_R"
|
||||
bone_map/RightRingIntermediate = &"B-f_ring_02_R"
|
||||
bone_map/RightRingDistal = &"B-f_ring_03_R"
|
||||
bone_map/RightLittleProximal = &"B-f_pinky_01_R"
|
||||
bone_map/RightLittleIntermediate = &"B-f_pinky_02_R"
|
||||
bone_map/RightLittleDistal = &"B-f_pinky_03_R"
|
||||
bone_map/LeftUpperLeg = &"B-thigh_L"
|
||||
bone_map/LeftLowerLeg = &"B-shin_L"
|
||||
bone_map/LeftFoot = &"B-foot_L"
|
||||
bone_map/LeftToes = &"B-toe_L"
|
||||
bone_map/RightUpperLeg = &"B-thigh_R"
|
||||
bone_map/RightLowerLeg = &"B-shin_R"
|
||||
bone_map/RightFoot = &"B-foot_R"
|
||||
bone_map/RightToes = &"B-toe_R"
|
|
@ -35,6 +35,14 @@ _subresources={
|
|||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Environments/Materials/Texture_01.tres"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"PATH:RootNode/SM_Buildings_Floor_5x5_01": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 3,
|
||||
"primitive/position": Vector3(-2.5, -0.05, 2.5),
|
||||
"primitive/size": Vector3(5, 0.1, 5)
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
|
|
|
@ -3,25 +3,26 @@
|
|||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dg1l3p37suwt3"
|
||||
path="res://.godot/imported/PolygonPrototype_Texture_04.png-93559159eb3466e54b1779968421b2c3.ctex"
|
||||
path.s3tc="res://.godot/imported/PolygonPrototype_Texture_04.png-93559159eb3466e54b1779968421b2c3.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Environments/Textures/PolygonPrototype_Texture_04.png"
|
||||
dest_files=["res://.godot/imported/PolygonPrototype_Texture_04.png-93559159eb3466e54b1779968421b2c3.ctex"]
|
||||
dest_files=["res://.godot/imported/PolygonPrototype_Texture_04.png-93559159eb3466e54b1779968421b2c3.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
@ -31,4 +32,4 @@ process/normal_map_invert_y=false
|
|||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
detect_3d/compress_to=0
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://eqoubuetw1vv"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://bd3tuw71coag3" path="res://Models/Props/Textures/Tree_Dead_Branch.png" id="1_kputc"]
|
||||
|
||||
[resource]
|
||||
transparency = 1
|
||||
cull_mode = 2
|
||||
albedo_texture = ExtResource("1_kputc")
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://b16k8isx1jl3g"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://b20jr1o15h27s" path="res://Models/Props/Textures/Fern_Texture.png" id="1_6x5t1"]
|
||||
|
||||
[resource]
|
||||
transparency = 1
|
||||
cull_mode = 2
|
||||
albedo_texture = ExtResource("1_6x5t1")
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dsb2h5v311x85"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://by5ltkdaer7j6" path="res://Models/Props/Textures/Leaves_Generic_Texture.png" id="1_s6ykt"]
|
||||
|
||||
[resource]
|
||||
transparency = 1
|
||||
cull_mode = 2
|
||||
albedo_texture = ExtResource("1_s6ykt")
|
|
@ -0,0 +1,6 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bimluh3mjp0ix"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dhwwd6tpuq1ml" path="res://Models/Props/Textures/PolygonNature_01.png" id="1_y41cn"]
|
||||
|
||||
[resource]
|
||||
albedo_texture = ExtResource("1_y41cn")
|
Binary file not shown.
|
@ -0,0 +1,41 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dex5ugontg3g1"
|
||||
path="res://.godot/imported/SM_Plant_Fern_01.fbx-bc96e9be201ecd00699e36fb2c1e43d3.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Plant_Fern_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Plant_Fern_01.fbx-bc96e9be201ecd00699e36fb2c1e43d3.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Tree": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Props/Materials/tree.tres"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
|
@ -0,0 +1,41 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://7f1i4no3h2h5"
|
||||
path="res://.godot/imported/SM_Plant_Fern_02.fbx-50caa4474dbb10d940e46905eb2514cb.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Plant_Fern_02.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Plant_Fern_02.fbx-50caa4474dbb10d940e46905eb2514cb.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Tree": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Props/Materials/tree.tres"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bwp2qess2q1ys"
|
||||
path="res://.godot/imported/SM_Plant_Fern_03.fbx-a6264c07f92255d538d1fb4ceb8e56f7.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Plant_Fern_03.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Plant_Fern_03.fbx-a6264c07f92255d538d1fb4ceb8e56f7.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bxeul7tdysdkk"
|
||||
path="res://.godot/imported/SM_Prop_Pillar_Arch_01.fbx-4413a582e1cfae5afa8a779e5620b853.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Prop_Pillar_Arch_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Prop_Pillar_Arch_01.fbx-4413a582e1cfae5afa8a779e5620b853.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=2
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://c8rbg84qs7dpe"
|
||||
path="res://.godot/imported/SM_Prop_Pillar_Broken_01.fbx-6ad9a9ba4b311baa0e56a49b80cba490.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Prop_Pillar_Broken_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Prop_Pillar_Broken_01.fbx-6ad9a9ba4b311baa0e56a49b80cba490.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://we6jqboy2bwa"
|
||||
path="res://.godot/imported/SM_Prop_Pillar_Broken_02.fbx-6e0d22869934d41a42cd4baacb5ee61d.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Prop_Pillar_Broken_02.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Prop_Pillar_Broken_02.fbx-6e0d22869934d41a42cd4baacb5ee61d.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=2
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,49 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://sf2ippantsrx"
|
||||
path="res://.godot/imported/SM_Prop_Pillar_Broken_Moss_01.fbx-8045d5a0178180db7d046a00e2fe0e73.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Prop_Pillar_Broken_Moss_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Prop_Pillar_Broken_Moss_01.fbx-8045d5a0178180db7d046a00e2fe0e73.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=2
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"lambert1": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Props/Materials/tree.tres"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"PATH:RootNode/SM_Prop_Pillar_Broken_Moss_01": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 3,
|
||||
"primitive/position": Vector3(0, 0.23, 0),
|
||||
"primitive/size": Vector3(1.5, 0.5, 0.5)
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,50 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://up6utdya5pxh"
|
||||
path="res://.godot/imported/SM_Prop_StoneWall_01.fbx-ec14bc38e13460abbdadf2e82e615315.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Prop_StoneWall_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Prop_StoneWall_01.fbx-ec14bc38e13460abbdadf2e82e615315.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=2
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"lambert1": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Props/Materials/tree.tres"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"PATH:RootNode/SM_Prop_StoneWall_01": {
|
||||
"generate/occluder": 1,
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 3,
|
||||
"primitive/position": Vector3(-2.45, 0.5, 0),
|
||||
"primitive/size": Vector3(5, 1, 0.5)
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,46 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://55s1at5inmv3"
|
||||
path="res://.godot/imported/SM_Rock_Wall_01.fbx-b26d79bc3a10badfba16c63704ddf5ad.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Rock_Wall_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Rock_Wall_01.fbx-b26d79bc3a10badfba16c63704ddf5ad.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=2
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"lambert1": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Props/Materials/tree.tres"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"PATH:RootNode/SM_Rock_Wall_01": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,54 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dsym0ndxgp01"
|
||||
path="res://.godot/imported/SM_Tree_Dead_02.fbx-231c3227f3383a53253500523c24c67f.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Tree_Dead_02.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Tree_Dead_02.fbx-231c3227f3383a53253500523c24c67f.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=2
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Leaves_Dead": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Props/Materials/dead_branch.tres"
|
||||
},
|
||||
"Trunk": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Props/Materials/tree.tres"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"PATH:RootNode/SM_Tree_Dead_02": {
|
||||
"generate/physics": true,
|
||||
"physics/shape_type": 5,
|
||||
"primitive/height": 2.5,
|
||||
"primitive/position": Vector3(0, 1, 0),
|
||||
"primitive/radius": 0.1
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b20jr1o15h27s"
|
||||
path.s3tc="res://.godot/imported/Fern_Texture.png-86b4cb03c2c27f7527d581a46603d050.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/Textures/Fern_Texture.png"
|
||||
dest_files=["res://.godot/imported/Fern_Texture.png-86b4cb03c2c27f7527d581a46603d050.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://by5ltkdaer7j6"
|
||||
path.s3tc="res://.godot/imported/Leaves_Generic_Texture.png-311e783912e6bbc47ac787ecf9214db4.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/Textures/Leaves_Generic_Texture.png"
|
||||
dest_files=["res://.godot/imported/Leaves_Generic_Texture.png-311e783912e6bbc47ac787ecf9214db4.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dhwwd6tpuq1ml"
|
||||
path.s3tc="res://.godot/imported/PolygonNature_01.png-8d601fd201fc6b24886820c962502976.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/Textures/PolygonNature_01.png"
|
||||
dest_files=["res://.godot/imported/PolygonNature_01.png-8d601fd201fc6b24886820c962502976.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bv802p28ssvqo"
|
||||
path="res://.godot/imported/PolygonNature_02.png-e9db27c2393a982a3232b81c9cc741c9.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/Textures/PolygonNature_02.png"
|
||||
dest_files=["res://.godot/imported/PolygonNature_02.png-e9db27c2393a982a3232b81c9cc741c9.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b5ol3toskc3dh"
|
||||
path="res://.godot/imported/PolygonNature_03.png-9715575ff52cabf3507c5bbef82a3294.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/Textures/PolygonNature_03.png"
|
||||
dest_files=["res://.godot/imported/PolygonNature_03.png-9715575ff52cabf3507c5bbef82a3294.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://hy8b8j1no6lt"
|
||||
path="res://.godot/imported/PolygonNature_04.png-613b4239645126b79551b017646b9c90.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/Textures/PolygonNature_04.png"
|
||||
dest_files=["res://.godot/imported/PolygonNature_04.png-613b4239645126b79551b017646b9c90.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bd3tuw71coag3"
|
||||
path.s3tc="res://.godot/imported/Tree_Dead_Branch.png-177f89f0172411ce5694549c7775e467.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/Textures/Tree_Dead_Branch.png"
|
||||
dest_files=["res://.godot/imported/Tree_Dead_Branch.png-177f89f0172411ce5694549c7775e467.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
Binary file not shown.
|
@ -0,0 +1,41 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://vgxi3xp3ces5"
|
||||
path="res://.godot/imported/MountainSkybox.fbx-b3fa7236421d2ee9a0de566dab23ed3f.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Sky/MountainSkybox.fbx"
|
||||
dest_files=["res://.godot/imported/MountainSkybox.fbx-b3fa7236421d2ee9a0de566dab23ed3f.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"lambert1": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Sky/sky.tres"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://fd8740pp6c65"
|
||||
path.s3tc="res://.godot/imported/Skybox_Diff.png-7540f2719dd0664056e8a8c9082d3027.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Sky/Skybox_Diff.png"
|
||||
dest_files=["res://.godot/imported/Skybox_Diff.png-7540f2719dd0664056e8a8c9082d3027.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://daxuhceq1xp8e"
|
||||
path="res://.godot/imported/Skybox_No_Snow_Diff.png-4aac1df060d706f7f84d7e011badea7b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Sky/Skybox_No_Snow_Diff.png"
|
||||
dest_files=["res://.godot/imported/Skybox_No_Snow_Diff.png-4aac1df060d706f7f84d7e011badea7b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cbgfiq60qi04y"
|
||||
path="res://.godot/imported/Skybox_Normal.png-0298afdd81d923bbadde428f4cf9fcc0.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Sky/Skybox_Normal.png"
|
||||
dest_files=["res://.godot/imported/Skybox_Normal.png-0298afdd81d923bbadde428f4cf9fcc0.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bmmdcphiyb35f"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://fd8740pp6c65" path="res://Models/Sky/Skybox_Diff.png" id="1_mcq4h"]
|
||||
|
||||
[resource]
|
||||
transparency = 1
|
||||
albedo_texture = ExtResource("1_mcq4h")
|
Binary file not shown.
|
@ -0,0 +1,41 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://b0xxc2h5fgtpm"
|
||||
path="res://.godot/imported/SM_Prop_Sword_01.fbx-bcf24ec78f44a339d13c7f93d8b8c416.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Weapons/SM_Prop_Sword_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Prop_Sword_01.fbx-bcf24ec78f44a339d13c7f93d8b8c416.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"lambert4SG2": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Weapons/sword.tres"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
|
@ -0,0 +1,6 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://ctst7ps33k0aj"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dg1l3p37suwt3" path="res://Models/Environments/Textures/PolygonPrototype_Texture_04.png" id="1_yk1ky"]
|
||||
|
||||
[resource]
|
||||
albedo_texture = ExtResource("1_yk1ky")
|
1702
godot/player.tscn
1702
godot/player.tscn
File diff suppressed because it is too large
Load Diff
|
@ -1,12 +1,16 @@
|
|||
#include "game_mode.hpp"
|
||||
#include <optional>
|
||||
#include "godot_cpp/variant/utility_functions.hpp"
|
||||
#include "godot_cpp/classes/viewport.hpp"
|
||||
#include "godot_macros.h"
|
||||
#include "level.hpp"
|
||||
#include "player.hpp"
|
||||
|
||||
namespace godot {
|
||||
GameMode* GameMode::static_instance{nullptr};
|
||||
GameMode *GameMode::static_instance{nullptr};
|
||||
|
||||
GameMode *GameMode::get_singleton() { return GameMode::static_instance; }
|
||||
bool GameMode::has_singleton() { return GameMode::static_instance != nullptr; }
|
||||
|
||||
void GameMode::_bind_methods() {
|
||||
#define CLASSNAME GameMode
|
||||
|
|
|
@ -31,6 +31,9 @@ public:
|
|||
void load_level(Ref<PackedScene>& levelScene,
|
||||
std::optional<String> entrance);
|
||||
|
||||
static GameMode *get_singleton();
|
||||
static bool has_singleton();
|
||||
|
||||
Player* get_player_instance() const;
|
||||
|
||||
void set_first_level(Ref<PackedScene> level);
|
||||
|
|
112
src/player.cpp
112
src/player.cpp
|
@ -1,8 +1,10 @@
|
|||
#include "player.hpp"
|
||||
#include <utility>
|
||||
#include "game_mode.hpp"
|
||||
#include "godot_cpp/classes/animation_tree.hpp"
|
||||
#include "godot_cpp/classes/node3d.hpp"
|
||||
#include "godot_cpp/classes/skeleton3d.hpp"
|
||||
#include "godot_cpp/variant/utility_functions.hpp"
|
||||
#include "godot_macros.h"
|
||||
|
||||
namespace godot {
|
||||
|
@ -11,50 +13,64 @@ void Player::_bind_methods() {
|
|||
#ifndef NDEBUG
|
||||
GDPROPERTY(active_customization, Variant::DICTIONARY);
|
||||
#endif
|
||||
GDFUNCTION_ARGS(on_horizontal, "event", "value");
|
||||
GDFUNCTION_ARGS(on_vertical, "event", "value");
|
||||
}
|
||||
void Player::_enter_tree() {
|
||||
this->model = this->get_node<Node3D>("Model");
|
||||
this->animTree = this->get_node<AnimationTree>("AnimationTree");
|
||||
this->customization_init();
|
||||
GDGAMEONLY();
|
||||
this->input = this->get_node<PlayerInput>("PlayerInput");
|
||||
}
|
||||
|
||||
void Player::_exit_tree() {
|
||||
// free the customization options that were removed from the tree
|
||||
for(std::pair<const String, CustomizationState>& pair: this->customization) {
|
||||
for(Node3D *option: pair.second.options) {
|
||||
if(!option->is_inside_tree()) {
|
||||
option->queue_free();
|
||||
}
|
||||
}
|
||||
}
|
||||
void Player::_ready() {
|
||||
this->customization_init();
|
||||
GDGAMEONLY();
|
||||
this->input->listen_to(PlayerInput::Listener("move_left", "move_right", this, "on_horizontal"));
|
||||
this->input->listen_to(PlayerInput::Listener("move_forward", "move_back", this, "on_vertical"));
|
||||
}
|
||||
|
||||
void Player::_process(double deltaTime) {}
|
||||
void Player::_physics_process(double deltaTime) {}
|
||||
|
||||
void Player::select_customization(String category, std::optional<size_t> index) {
|
||||
if(this->customization.find(category) == this->customization.end())
|
||||
void Player::set_customization_active(Node3D *node, bool active) {
|
||||
node->set_visible(active);
|
||||
node->set_process(active);
|
||||
}
|
||||
|
||||
void Player::on_horizontal(Ref<InputEvent> event, float value) {
|
||||
this->moveInput.x = value;
|
||||
}
|
||||
|
||||
void Player::on_vertical(Ref<InputEvent> event, float value) {
|
||||
this->moveInput.y = value;
|
||||
}
|
||||
|
||||
void Player::select_customization(String category,
|
||||
std::optional<size_t> index) {
|
||||
if (this->customization.find(category) == this->customization.end())
|
||||
return;
|
||||
CustomizationState &pair = this->customization.at(category);
|
||||
CustomizationState& pair = this->customization.at(category);
|
||||
// invalid keys are stored as the size of the array
|
||||
if(index.has_value() && index.value() > pair.options.size())
|
||||
if (index.has_value() && index.value() > pair.options.size())
|
||||
index = std::nullopt;
|
||||
// nothing changes
|
||||
if(index == pair.currentSelected)
|
||||
if (index == pair.currentSelected)
|
||||
return;
|
||||
// disable previous chosen option, if any
|
||||
if(pair.currentSelected.has_value())
|
||||
customizationParent->remove_child(pair.options.at(pair.currentSelected.value()));
|
||||
if (pair.currentSelected.has_value())
|
||||
Player::set_customization_active(pair.options.at(pair.currentSelected.value()), false);
|
||||
// enable chosen option, if any
|
||||
if(index.has_value())
|
||||
customizationParent->add_child(pair.options.at(index.value()));
|
||||
if (index.has_value())
|
||||
Player::set_customization_active(pair.options.at(index.value()), false);
|
||||
pair.currentSelected = index;
|
||||
}
|
||||
|
||||
Dictionary Player::get_active_customization() const {
|
||||
Dictionary result{};
|
||||
// translate the map to a dictionary of keys and indexes
|
||||
for(std::pair<String, CustomizationState> const &pair: this->customization)
|
||||
for (std::pair<String, CustomizationState> const& pair :
|
||||
this->customization)
|
||||
result[pair.first] = pair.second.currentSelected.has_value()
|
||||
? pair.second.currentSelected.value()
|
||||
: -1; // an invalid key will always be -1
|
||||
|
@ -62,58 +78,66 @@ Dictionary Player::get_active_customization() const {
|
|||
}
|
||||
|
||||
void Player::set_active_customization(Dictionary value) {
|
||||
for(size_t i = 0; i < value.size(); ++i) {
|
||||
for (size_t i = 0; i < value.size(); ++i) {
|
||||
String key = value.keys()[i];
|
||||
size_t selection = value[key];
|
||||
bool exists = this->customization.find(key) != this->customization.end(); // wether or not the a given key exists in the customization map
|
||||
// if not, it can be added, as long as the customization map has not yet been initialized by _enter_tree
|
||||
if(!exists && !this->is_inside_tree())
|
||||
// wether or not the a given key exists in the customization map
|
||||
bool exists = this->customization.find(key) != this->customization.end();
|
||||
// if not, it can be added, as long as the customization map has not yet
|
||||
// been initialized by _ready
|
||||
if (!exists && !this->is_inside_tree())
|
||||
this->customization.insert({key, {std::optional{selection}, {}}});
|
||||
// if the key does not exist in customization and _enter_tree is already called, the key is not valid and discarted
|
||||
else if(!exists)
|
||||
// if the key does not exist in customization and _ready is already
|
||||
// called, the key is not valid and discarted
|
||||
else if (!exists)
|
||||
return;
|
||||
else
|
||||
this->select_customization(key, selection >= 0 ? std::optional{selection} : std::nullopt);
|
||||
this->select_customization(
|
||||
key, selection >= 0 ? std::optional{selection} : std::nullopt);
|
||||
}
|
||||
}
|
||||
|
||||
void Player::customization_init() {
|
||||
this->customizationParent = this->get_node<Skeleton3D>("Model/RootNode/Skeleton3D");
|
||||
if(!this->customizationParent)
|
||||
this->customizationParent =
|
||||
this->get_node<Skeleton3D>("Model/RootNode/GeneralSkeleton");
|
||||
if (this->customizationParent == nullptr)
|
||||
return;
|
||||
for(int i = 0; i < customizationParent->get_child_count(); ++i) {
|
||||
for (int i = 0; i < customizationParent->get_child_count(); ++i) {
|
||||
// get the next valid child
|
||||
Node3D *child = Object::cast_to<Node3D>(this->customizationParent->get_child(i));
|
||||
if(!child) continue;
|
||||
Node3D* child = Object::cast_to<Node3D>(this->customizationParent->get_child(i));
|
||||
if (child == nullptr)
|
||||
continue;
|
||||
// split it's name into parts based on _
|
||||
// the format for the names will be Chr_<CATEGORY NAME>_<ADDITIONAL IDENTIFIERS>_<NUMBER>
|
||||
// numbering IS NOT guaranteed to start at 0 OR 1
|
||||
// the format for the names will be Chr_<CATEGORY NAME>_<ADDITIONAL IDENTIFIERS>_<NUMBER> numbering IS NOT guaranteed to start at 0 OR 1
|
||||
// the category name will serve as the key to the customization map
|
||||
// additional identifiers are ignored
|
||||
PackedStringArray slices = child->get_name().split("_", false);
|
||||
// create a new customization state if one does not exist for this category
|
||||
if(this->customization.find(slices[1]) == this->customization.end())
|
||||
if (this->customization.find(slices[1]) == this->customization.end())
|
||||
this->customization.insert({slices[1], {std::optional{0}, {}}});
|
||||
// add the new child to the customization options for this category
|
||||
CustomizationState &state = this->customization.at(slices[1]);
|
||||
CustomizationState& state = this->customization.at(slices[1]);
|
||||
state.options.push_back(child);
|
||||
// only allow this child to exist in the scene tree if it was saved as the current selection
|
||||
if(state.currentSelected != state.options.size()-1) {
|
||||
this->customizationParent->remove_child(child);
|
||||
--i;
|
||||
// set invisible if this child is not the current selection
|
||||
if (state.currentSelected != state.options.size() - 1) {
|
||||
Player::set_customization_active(child, false);
|
||||
}
|
||||
}
|
||||
// collect customization categories that do not contain any options
|
||||
std::vector<String> empty{};
|
||||
for(std::pair<const String, CustomizationState>& pair: this->customization) {
|
||||
if(pair.second.options.size() == 0)
|
||||
for (std::pair<const String, CustomizationState>& pair :
|
||||
this->customization) {
|
||||
if (pair.second.options.size() == 0)
|
||||
empty.push_back(pair.first);
|
||||
if(pair.second.currentSelected.has_value() && pair.second.currentSelected.value() > pair.second.options.size())
|
||||
if (pair.second.currentSelected.has_value() &&
|
||||
pair.second.currentSelected.value() > pair.second.options.size())
|
||||
pair.second.currentSelected = std::nullopt;
|
||||
UtilityFunctions::print("- ", pair.first);
|
||||
}
|
||||
// remove collected empty categories
|
||||
for(String const& key: empty) {
|
||||
for (String const& key : empty) {
|
||||
this->customization.erase(key);
|
||||
UtilityFunctions::print("removing ", key);
|
||||
}
|
||||
}
|
||||
} // namespace godot
|
||||
|
|
|
@ -4,7 +4,9 @@
|
|||
#include <map>
|
||||
#include "godot_cpp/classes/animation_tree.hpp"
|
||||
#include "godot_cpp/classes/character_body3d.hpp"
|
||||
#include "godot_cpp/classes/input_event.hpp"
|
||||
#include "godot_cpp/classes/skeleton3d.hpp"
|
||||
#include "player_input.hpp"
|
||||
#include <optional>
|
||||
|
||||
namespace godot {
|
||||
|
@ -26,13 +28,23 @@ protected:
|
|||
AnimationTree* animTree{nullptr};
|
||||
// the skeleton of the customizable character model
|
||||
Skeleton3D *customizationParent{nullptr};
|
||||
PlayerInput *input{nullptr};
|
||||
|
||||
float walkSpeed{10.f};
|
||||
|
||||
Vector2 moveInput{0.f, 0.f};
|
||||
|
||||
public:
|
||||
virtual void _enter_tree() override;
|
||||
virtual void _exit_tree() override;
|
||||
virtual void _ready() override;
|
||||
virtual void _process(double deltaTime) override;
|
||||
virtual void _physics_process(double deltaTime) override;
|
||||
|
||||
static void set_customization_active(Node3D *node, bool active);
|
||||
|
||||
void on_horizontal(Ref<InputEvent> event, float value);
|
||||
void on_vertical(Ref<InputEvent> event, float value);
|
||||
|
||||
// Swap out the currently active customization for this category
|
||||
void select_customization(String category, std::optional<size_t> value);
|
||||
// Construct a dictionary of [String, int] where the key is a category
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
#include "player_input.hpp"
|
||||
#include "godot_macros.h"
|
||||
#include "godot_cpp/classes/input.hpp"
|
||||
#include "godot_cpp/classes/input_event.hpp"
|
||||
#include <algorithm>
|
||||
|
||||
namespace godot {
|
||||
void PlayerInput::_bind_methods() {}
|
||||
|
||||
PlayerInput::Listener::Listener(String positive, String negative, Node *object, String method)
|
||||
: actionNegative{negative}
|
||||
, actionPositive{positive}
|
||||
, methodName{method}
|
||||
, object{object} {}
|
||||
|
||||
bool PlayerInput::Listener::has_changed(Ref<InputEvent> const &event) {
|
||||
return event->is_action(this->actionNegative) || event->is_action(this->actionPositive);
|
||||
}
|
||||
float PlayerInput::Listener::evaluate(Ref<InputEvent> const &event) {
|
||||
float newest = static_cast<float>(event->is_action_pressed(this->actionPositive))
|
||||
- static_cast<float>(event->is_action_pressed(this->actionNegative));
|
||||
if(lastCached != newest)
|
||||
this->object->call(this->methodName, event, newest);
|
||||
return (lastCached = newest);
|
||||
}
|
||||
|
||||
bool PlayerInput::Listener::operator==(godot::PlayerInput::Listener const& b) {
|
||||
return this->methodName == b.methodName
|
||||
&& this->object == b.object
|
||||
&& this->actionNegative == b.actionNegative
|
||||
&& this->actionPositive == b.actionPositive;
|
||||
}
|
||||
|
||||
void PlayerInput::_unhandled_input(Ref<InputEvent> const &event) {
|
||||
GDGAMEONLY();
|
||||
for(Listener& listener: this->listeners) {
|
||||
if(listener.has_changed(event)) {
|
||||
listener.evaluate(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PlayerInput::listen_to(Listener const& listener) {
|
||||
this->listeners.push_back(listener);
|
||||
}
|
||||
|
||||
void PlayerInput::stop_listening(Node *node) {
|
||||
for(size_t i = 0; i < this->listeners.size(); ++i) {
|
||||
Listener& l = this->listeners.at(i);
|
||||
if(l.object == node) {
|
||||
this->listeners.erase(this->listeners.begin() + i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PlayerInput::stop_listening(Listener const& listener) {
|
||||
std::vector<Listener>::iterator itr = std::find(this->listeners.begin(), this->listeners.end(), listener);
|
||||
if(itr != this->listeners.end())
|
||||
this->listeners.erase(itr);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#ifndef PLAYER_INPUT_HPP
|
||||
#define PLAYER_INPUT_HPP
|
||||
|
||||
#include <vector>
|
||||
#include "godot_cpp/classes/input_event.hpp"
|
||||
#include "godot_cpp/classes/node.hpp"
|
||||
|
||||
namespace godot {
|
||||
class PlayerInput : public Node {
|
||||
GDCLASS(PlayerInput, Node)
|
||||
static void _bind_methods();
|
||||
public:
|
||||
struct Listener {
|
||||
String actionNegative{""};
|
||||
String actionPositive{""};
|
||||
float lastCached{0.f};
|
||||
String methodName{""};
|
||||
Node *object;
|
||||
|
||||
Listener(String positive, String negative, Node *object, String method);
|
||||
bool has_changed(Ref<InputEvent> const &event);
|
||||
float evaluate(Ref<InputEvent> const &event);
|
||||
bool operator==(godot::PlayerInput::Listener const& b);
|
||||
};
|
||||
private:
|
||||
std::vector<Listener> listeners;
|
||||
public:
|
||||
virtual void _unhandled_input(Ref<InputEvent> const &event) override;
|
||||
|
||||
void listen_to(Listener const& listener);
|
||||
void stop_listening(Node *node);
|
||||
void stop_listening(Listener const& listener);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif // !PLAYER_INPUT_HPP
|
|
@ -8,6 +8,7 @@
|
|||
#include "game_mode.hpp"
|
||||
#include "level.hpp"
|
||||
#include "player.hpp"
|
||||
#include "player_input.hpp"
|
||||
|
||||
using namespace godot;
|
||||
|
||||
|
@ -19,6 +20,7 @@ void initialize_gdextension_types(ModuleInitializationLevel p_level) {
|
|||
ClassDB::register_class<Level>();
|
||||
ClassDB::register_class<Entrance>();
|
||||
ClassDB::register_class<GameMode>();
|
||||
ClassDB::register_class<PlayerInput>();
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
|
Loading…
Reference in New Issue