some updates
This commit is contained in:
parent
d103f5f507
commit
4454a25d5b
@ -112,6 +112,9 @@
|
|||||||
<haxelib name="flixel-addons" />
|
<haxelib name="flixel-addons" />
|
||||||
<haxelib name="hscript" />
|
<haxelib name="hscript" />
|
||||||
|
|
||||||
|
<haxelib name="actuate" />
|
||||||
|
<haxelib name="extension-webm"/> <!-- Make sure to use https://github.com/KadeDev/extension-webm/ -->
|
||||||
|
|
||||||
<!--In case you want to use the ui package-->
|
<!--In case you want to use the ui package-->
|
||||||
<haxelib name="flixel-ui" />
|
<haxelib name="flixel-ui" />
|
||||||
<haxelib name="newgrounds"/>
|
<haxelib name="newgrounds"/>
|
||||||
|
@ -60,3 +60,9 @@ This game was made with love to Newgrounds and its community. Extra love to Tom
|
|||||||
### Kade Engine
|
### Kade Engine
|
||||||
- [KadeDeveloper](https://twitter.com/KadeDeveloper) - Maintainer and lead programmer
|
- [KadeDeveloper](https://twitter.com/KadeDeveloper) - Maintainer and lead programmer
|
||||||
- [The contributors](https://github.com/KadeDev/Kade-Engine/graphs/contributors)
|
- [The contributors](https://github.com/KadeDev/Kade-Engine/graphs/contributors)
|
||||||
|
|
||||||
|
|
||||||
|
### Shoutouts
|
||||||
|
- [GWebDev](https://github.com/GrowtopiaFli) - Video Code
|
||||||
|
- [Rozebud](https://github.com/ThatRozebudDude) - Ideas (that I stole)
|
||||||
|
- [Puyo](https://github.com/daniel11420) - Setting up appveyor and a lot of other help
|
BIN
assets/preload/videos/daWeirdVid/dontDelete.webm
Normal file
BIN
assets/preload/videos/daWeirdVid/dontDelete.webm
Normal file
Binary file not shown.
@ -26,7 +26,7 @@ hr {
|
|||||||
<p id="HtmlIsTheWorstThingIHaveEverUsed">
|
<p id="HtmlIsTheWorstThingIHaveEverUsed">
|
||||||
<a class="headerlink" href="{{site.url}}changelogs/">Changelogs</a>
|
<a class="headerlink" href="{{site.url}}changelogs/">Changelogs</a>
|
||||||
<a class="headerlink" href="{{site.url}}building">Building</a>
|
<a class="headerlink" href="{{site.url}}building">Building</a>
|
||||||
<a class="headerlink" href="{{site.url}}modchart">Modcharts</a>
|
<a class="headerlink" href="https://github.com/KadeDev/Kade-Engine/wiki/">Modchart Documentation</a>
|
||||||
<a class="headerlink" href="{{site.url}}guides">Guides</a>
|
<a class="headerlink" href="{{site.url}}guides">Guides</a>
|
||||||
<br>
|
<br>
|
||||||
<hr>
|
<hr>
|
||||||
|
533
docs/modchart.md
533
docs/modchart.md
@ -1,531 +1,2 @@
|
|||||||
# Lua Modcharts
|
### RELOCATED
|
||||||
|
Relocated to [here](https://github.com/KadeDev/Kade-Engine/wiki/)
|
||||||
In the 1.4.2 release of Kade Engine, we introduced Mod Charts. Mod Charts are a way of changing gameplay without hard coded values. This is achieved by using the Lua Scripting language to create script files that run during runtime.
|
|
||||||
|
|
||||||
Song data is located in `assets/data/<song>/`, so the Lua file containing your scripts should be located at exactly `assets/data/<song>/modchart.lua`. (replace <song> with the name of the song. for example, `assets/data/milf/` for milf)
|
|
||||||
|
|
||||||
If the file doesn't exist, Lua code won't be ran.
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
Full Example
|
|
||||||
|
|
||||||
```lua
|
|
||||||
function start (song)
|
|
||||||
print("Song: " .. song .. " @ " .. bpm .. " downscroll: " .. downscroll)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function update (elapsed) -- example https://twitter.com/KadeDeveloper/status/1382178179184422918
|
|
||||||
local currentBeat = (songPos / 1000)*(bpm/60)
|
|
||||||
for i=0,7 do
|
|
||||||
setActorX(_G['defaultStrum'..i..'X'] + 32 * math.sin((currentBeat + i*0.25) * math.pi), i)
|
|
||||||
setActorY(_G['defaultStrum'..i..'Y'] + 32 * math.cos((currentBeat + i*0.25) * math.pi), i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function beatHit (beat)
|
|
||||||
-- do nothing
|
|
||||||
end
|
|
||||||
|
|
||||||
function stepHit (step)
|
|
||||||
-- do nothing
|
|
||||||
end
|
|
||||||
|
|
||||||
function keyPressed (key)
|
|
||||||
-- do nothing
|
|
||||||
end
|
|
||||||
|
|
||||||
print("Mod Chart script loaded :)")
|
|
||||||
```
|
|
||||||
|
|
||||||
Spinning Receptor Example
|
|
||||||
|
|
||||||
```lua
|
|
||||||
function update (elapsed)
|
|
||||||
for i=0,7 do
|
|
||||||
setActorAngle(getActorAngle(i) + 15, i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Spinning Hud Example
|
|
||||||
|
|
||||||
```lua
|
|
||||||
function update (elapsed)
|
|
||||||
camHudAngle = camHudAngle + 0.005
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Spin at a specific part of the song
|
|
||||||
|
|
||||||
```lua
|
|
||||||
function update (elapsed)
|
|
||||||
if curStep >= 352 and curStep < 400 then
|
|
||||||
local currentBeat = (songPos / 1000)*(bpm/60)
|
|
||||||
for i=0,7 do
|
|
||||||
setActorX(_G['defaultStrum'..i..'X'] + 32 * math.sin((currentBeat + i*0.25) * math.pi), i)
|
|
||||||
setActorY(_G['defaultStrum'..i..'Y'] + 32 * math.cos((currentBeat + i*0.25) * math.pi), i)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
for i=0,7 do
|
|
||||||
setActorX(_G['defaultStrum'..i..'X'],i)
|
|
||||||
setActorY(_G['defaultStrum'..i..'Y'],i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Showing/Hiding receptors/the hud
|
|
||||||
|
|
||||||
```lua
|
|
||||||
function start (song)
|
|
||||||
showOnlyStrums = true -- remove all hud elements besides notes and strums
|
|
||||||
for i=0,3 do -- fade out the first 4 receptors (the ai receptors)
|
|
||||||
tweenFadeIn(i,0,0.6)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Looping through all of the rendered notes
|
|
||||||
|
|
||||||
```lua
|
|
||||||
for i = 0, getRenderedNotes() do -- sets all of the rendered notes to 0 0 on the x and y axsis
|
|
||||||
setRenderedNotePos(0,0,i)
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Centering BF's Side
|
|
||||||
|
|
||||||
```lua
|
|
||||||
function setDefault(id)
|
|
||||||
_G['defaultStrum'..id..'X'] = getActorX(id)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- put this somewhere in a function
|
|
||||||
|
|
||||||
for i = 4, 7 do -- go to the center
|
|
||||||
tweenPosXAngle(i, _G['defaultStrum'..i..'X'] - 275,getActorAngle(i) + 360, 0.6, 'setDefault')
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Jumping Arrows Example
|
|
||||||
```lua
|
|
||||||
function stepHit (step)
|
|
||||||
if step == 1 then
|
|
||||||
setActorAccelerationY(100, 4)
|
|
||||||
end
|
|
||||||
if step == 3 then
|
|
||||||
setActorAccelerationY(100, 5)
|
|
||||||
end
|
|
||||||
if step == 5 then
|
|
||||||
setActorAccelerationY(100, 6)
|
|
||||||
end
|
|
||||||
if step == 7 then
|
|
||||||
setActorAccelerationY(100, 7)
|
|
||||||
end
|
|
||||||
for i=4,7 do
|
|
||||||
if getActorY(i) >= 100 then
|
|
||||||
setActorY(100, i)
|
|
||||||
setActorVelocityY(-100, i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Available Hooks
|
|
||||||
|
|
||||||
Current calls to functions include,
|
|
||||||
|
|
||||||
| Name | Arguments | Description |
|
|
||||||
| :-----: | :------------: | :----------------------------------------------------------: |
|
|
||||||
| start | Song Name | Gets called when the song starts |
|
|
||||||
| update | Elapsed frames | Gets called every frame (after the song starts) |
|
|
||||||
| stepHit | Current Step | Gets called when ever a step hits (steps are in between beats, aka 4 steps are in a beat) |
|
|
||||||
| beatHit | Current Beat | Gets called when ever a beat hits |
|
|
||||||
| keyPressed | Key Pressed | Gets called when a key just got pressed (up, down, left, right, accept) |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Global Variables
|
|
||||||
|
|
||||||
Kade Engine provides a list of global variables to be used in the lua scripting interface.
|
|
||||||
|
|
||||||
| G Name | Type | Description |
|
|
||||||
| :------------------: | :---: | :----------------------------------------------------------: |
|
|
||||||
| bpm | Float | The current BPM of the song |
|
|
||||||
| fpsCap | Int | The current FPS Cap (set by the player) |
|
|
||||||
| downscroll | Bool | Whether the player is in downscroll or not |
|
|
||||||
| cameraAngle | Float | The angle that the Main Camera should be rotated |
|
|
||||||
| camHudAngle | Float | The angle that the Hud should be rotated |
|
|
||||||
| followXOffset | Float | The x offset to be added when the camera moves between a character |
|
|
||||||
| followYOffset | Float | The y offset to be added when the camera moves between a character |
|
|
||||||
| showOnlyStrums | Bool | Whether to show the Hud and Strums or only the Strums |
|
|
||||||
| strumLine1Visible | Bool | Whether to show the first strum line or not |
|
|
||||||
| strumLine2Visible | Bool | Whether to show the secondstrum line or not |
|
|
||||||
| defaultStrum0-7X | Float | (0-7 is strum0,strum1,strum2,etc) get the default X coordinate for the strum |
|
|
||||||
| defaultStrum0-7Y | Float | (0-7 is strum0,strum1,strum2,etc) get the default Y coordinate for the strum |
|
|
||||||
| defaultStrum0-7Angle | Float | (0-7 is strum0,strum1,strum2,etc) get the default Angle for the strum |
|
|
||||||
| screenWidth | Int | The width of the current gamespace |
|
|
||||||
| screenHeight | Int | The height of the current gamespace |
|
|
||||||
| hudWidth | Int | The width of the hud |
|
|
||||||
| hudHeight | Int | The height of the hud |
|
|
||||||
| scrollSpeed | Int | The current scrollspeed |
|
|
||||||
| mustHit | Bool | If the current section is a must hit section |
|
|
||||||
| strumLineY | Float | The current Strum Line Y Position |
|
|
||||||
|
|
||||||
## Functions
|
|
||||||
|
|
||||||
Kade Engine exposes a lot of functions that let you modify elements in the game field.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
To get started every sprite has an id, and there are some id's that are accessible without creating one.
|
|
||||||
|
|
||||||
These premade id's are the following:
|
|
||||||
|
|
||||||
| Sprite Id | Value |
|
|
||||||
| :--------: | :--------------------------------------: |
|
|
||||||
| 0-7 | Represents Receptor 0-7 |
|
|
||||||
| boyfriend | Represents the Boyfriend Actor (player1) |
|
|
||||||
| dad | Represents the Dad Actor (player2) |
|
|
||||||
| girlfriend | Represents the Girlfriend Actor |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Sprites
|
|
||||||
|
|
||||||
##### makeSprite(string SpritePath,string SpriteId,bool DrawBehind)
|
|
||||||
|
|
||||||
Creates a sprite out of the specified image, returns the id you gave it.
|
|
||||||
|
|
||||||
*Note: Sprite Path is normally the FILE NAME so if your file is named `Image` it'll go to assets/data/songName/Image.png so don't include the extension*
|
|
||||||
|
|
||||||
### Hud/Camera
|
|
||||||
|
|
||||||
##### setHudPosition(int x, int y)
|
|
||||||
|
|
||||||
Sets the game hud's position in space.
|
|
||||||
|
|
||||||
##### getHudX()
|
|
||||||
|
|
||||||
Returns the hud's x position
|
|
||||||
|
|
||||||
##### getHudY()
|
|
||||||
|
|
||||||
Returns the hud's y position
|
|
||||||
|
|
||||||
##### setCamPosition(int x, int y)
|
|
||||||
|
|
||||||
Set's the current camera's position in space
|
|
||||||
|
|
||||||
##### getCameraX()
|
|
||||||
|
|
||||||
Returns the current camera's x position
|
|
||||||
|
|
||||||
##### getCameraY()
|
|
||||||
|
|
||||||
Returns the current camera's y position
|
|
||||||
|
|
||||||
##### setCamZoom(float zoomAmount)
|
|
||||||
|
|
||||||
Set's the current camera's zoom
|
|
||||||
|
|
||||||
##### setHudZoom(float zoomAmount)
|
|
||||||
|
|
||||||
Set's the hud's zoom
|
|
||||||
|
|
||||||
### Strumline
|
|
||||||
|
|
||||||
##### setStrumlineY(float y)
|
|
||||||
|
|
||||||
Set's the y position of the strumLine
|
|
||||||
|
|
||||||
### Actors
|
|
||||||
|
|
||||||
##### getRenderedNotes()
|
|
||||||
|
|
||||||
Returns the amount of rendered notes.
|
|
||||||
|
|
||||||
##### getRenderedNoteX(int id)
|
|
||||||
|
|
||||||
Returns the x position of the rendered note id
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteY(int id)
|
|
||||||
|
|
||||||
Returns the y position of the rendered note id
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteScaleX(int id)
|
|
||||||
|
|
||||||
Returns the scale x of the rendered note id
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteScaleY(int id)
|
|
||||||
|
|
||||||
Returns the scale y of the rendered note id
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteType(int id)
|
|
||||||
|
|
||||||
Returns the note data of an note (0-3, left, down, up, right)
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteHit(int id)
|
|
||||||
|
|
||||||
Returns whether a rendered note must be hit by the player or not
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### isSustain(int id)
|
|
||||||
|
|
||||||
Returns whether a rendered note is a sustain note or not (if they appear as the trail)
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### isParentSustain(int id)
|
|
||||||
|
|
||||||
Returns whether a rendered note's parrent is a sustain note or not (if they appear as the trail)
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteParentX(int id)
|
|
||||||
|
|
||||||
Returns the current parent x of the specified rendered note's id
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteParentY(int id)
|
|
||||||
|
|
||||||
Returns the current parent y of the specified rendered note's id
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteCalcX(int id)
|
|
||||||
|
|
||||||
Returns what the game would normally put the specified rendered note x.
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### anyNotes()
|
|
||||||
|
|
||||||
Returns true if there are rendered notes, and returns false if there are none
|
|
||||||
|
|
||||||
##### getRenderedNoteStrumtime(int id)
|
|
||||||
|
|
||||||
Returns strum time of the rendered note.
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteAlpha(int id)
|
|
||||||
|
|
||||||
Returns the alpha of the rendered note id
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteWidth(int id)
|
|
||||||
|
|
||||||
Returns the width of the specified rendered note.
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### getRenderedNoteAngle(int id)
|
|
||||||
|
|
||||||
Returns the angle of the specified rendered note.
|
|
||||||
|
|
||||||
*Note: Rendered Notes id's are special in the way that they act. 0 = closest note to any receptor, last index = the farthest away from any receptor.*
|
|
||||||
|
|
||||||
##### setRenderedNotePos(int x, int y, int id)
|
|
||||||
|
|
||||||
Set's the position of the rendered note id
|
|
||||||
|
|
||||||
*Note: Setting a Rendered Note's property will stop the note from updating it's alpha & x properties*
|
|
||||||
|
|
||||||
##### setRenderedNoteAlpha(float alpha, int id)
|
|
||||||
|
|
||||||
Set's the alpha of the rendered note id
|
|
||||||
|
|
||||||
*Note: Setting a Rendered Note's property will stop the note from updating it's alpha & x properties*
|
|
||||||
|
|
||||||
##### setRenderedNoteScale(float scale, int id)
|
|
||||||
|
|
||||||
Set's the scale of the rendered note id
|
|
||||||
|
|
||||||
*Note: Setting a Rendered Note's property will stop the note from updating it's alpha & x properties*
|
|
||||||
|
|
||||||
##### setRenderedNoteScaleX(float scale, int id) **Currently broken**
|
|
||||||
|
|
||||||
Set's the scale x of the rendered note id
|
|
||||||
|
|
||||||
*Note: Setting a Rendered Note's property will stop the note from updating it's alpha & x properties*
|
|
||||||
|
|
||||||
##### setRenderedNoteScaleY(float scale, int id) **Currently broken**
|
|
||||||
|
|
||||||
Set's the scale y of the rendered note id
|
|
||||||
|
|
||||||
*Note: Setting a Rendered Note's property will stop the note from updating it's alpha & x properties*
|
|
||||||
|
|
||||||
##### getActorX(string/int id)
|
|
||||||
|
|
||||||
Returns the x position for the sprite id
|
|
||||||
|
|
||||||
##### getActorY(string/int id)
|
|
||||||
|
|
||||||
Returns the y position for the sprite id
|
|
||||||
|
|
||||||
##### getActorScaleX(string/int id)
|
|
||||||
|
|
||||||
Returns the scale x for the sprite id
|
|
||||||
|
|
||||||
##### getActorScaleY(string/int id)
|
|
||||||
|
|
||||||
Returns the scale y for the sprite id
|
|
||||||
|
|
||||||
##### getActorAlpha(string/int id)
|
|
||||||
|
|
||||||
Returns the alpha for the sprite id
|
|
||||||
|
|
||||||
##### getActorAngle(string/int id)
|
|
||||||
|
|
||||||
Returns the angle for the sprite id
|
|
||||||
|
|
||||||
##### setActorX(int x, string/int id)
|
|
||||||
|
|
||||||
Set's the x position for the sprite id
|
|
||||||
|
|
||||||
##### setActorAccelerationX(int x, string/int id)
|
|
||||||
|
|
||||||
Sets the x acceleration for the sprite id
|
|
||||||
|
|
||||||
##### setActorDragX(int x, string/int id)
|
|
||||||
|
|
||||||
Sets the x drag for the sprite id
|
|
||||||
|
|
||||||
##### setActorVelocityX(int x, string/int id)
|
|
||||||
|
|
||||||
Sets the x velocity for the sprite id
|
|
||||||
|
|
||||||
##### setActorY(int y, string/int id)
|
|
||||||
|
|
||||||
Set's the y position for the sprite id
|
|
||||||
|
|
||||||
##### setActorAccelerationY(int y, string/int id)
|
|
||||||
|
|
||||||
Sets the y acceleration for the sprite id
|
|
||||||
|
|
||||||
##### setActorDragY(int y, string/int id)
|
|
||||||
|
|
||||||
Sets the y drag for the sprite id
|
|
||||||
|
|
||||||
##### setActorVelocityY(int y, string/int id)
|
|
||||||
|
|
||||||
Sets the y velocity for the sprite id
|
|
||||||
|
|
||||||
##### setActorAlpha(float alpha, string/int id)
|
|
||||||
|
|
||||||
Set's the alpha for the sprite id
|
|
||||||
|
|
||||||
##### setActorAngle(int alpha, string/int id)
|
|
||||||
|
|
||||||
Set's the angle for the sprite id
|
|
||||||
|
|
||||||
##### setActorScale(float scale, string/int id)
|
|
||||||
|
|
||||||
Set's the scale for the sprite id
|
|
||||||
|
|
||||||
##### setActorScaleXY(float scaleX, float scaleY, string/int id)
|
|
||||||
|
|
||||||
Set's the x and y scale for the sprite id
|
|
||||||
|
|
||||||
##### setActorFlipX(bool flip, string/int id)
|
|
||||||
|
|
||||||
Set's the x flip for the sprite id
|
|
||||||
|
|
||||||
##### setActorFlipY(bool flip, string/int id)
|
|
||||||
|
|
||||||
Set's the y flip for the sprite id
|
|
||||||
|
|
||||||
##### getActorWidth(string/int id)
|
|
||||||
|
|
||||||
Returns the width for the sprite id
|
|
||||||
|
|
||||||
##### getActorHeight(string/int id)
|
|
||||||
|
|
||||||
Returns the height for the sprite id
|
|
||||||
|
|
||||||
##### changeBoyfriendCharacter(string id)
|
|
||||||
|
|
||||||
Changes the Boyfriend sprite to another character
|
|
||||||
|
|
||||||
##### changeDadCharacter(string id)
|
|
||||||
|
|
||||||
Changes the Dad sprite to another character
|
|
||||||
|
|
||||||
##### playActorAnimation(string/int id, string anim, bool force, bool reverse)
|
|
||||||
|
|
||||||
Plays an animation on a sprite
|
|
||||||
|
|
||||||
### Tweens
|
|
||||||
|
|
||||||
*Note, On Complete functions are based by the function name (and they also well get called when the tween completes)*
|
|
||||||
|
|
||||||
##### tweenPos(string/int id, int toX, int toY, float time, string onComplete)
|
|
||||||
|
|
||||||
Smoothly tween into a x and y position
|
|
||||||
|
|
||||||
##### tweenPosXAngle(string/int id, int toX, float toAngle, float time, string onComplete)
|
|
||||||
|
|
||||||
Smoothly tween into a x position and angle
|
|
||||||
|
|
||||||
##### tweenPosYAngle(string/int id, int toY, float toAngle, float time, string onComplete)
|
|
||||||
|
|
||||||
Smoothly tween into a y position and angle
|
|
||||||
|
|
||||||
##### tweenAngle(string/int id, float toAngle, float time, string onComplete)
|
|
||||||
|
|
||||||
Smoothly tween into a angle
|
|
||||||
|
|
||||||
##### tweenFadeIn(string/int id, float toAlpha, float time, string onComplete)
|
|
||||||
|
|
||||||
Smoothly fade in to an alpha
|
|
||||||
|
|
||||||
##### tweenFadeOut(string/int id, float toAlpha, float time, string onComplete)
|
|
||||||
|
|
||||||
Smoothly fade out to an alpha
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Window & Screen
|
|
||||||
|
|
||||||
##### getWindowX()
|
|
||||||
|
|
||||||
Returns the window's x position
|
|
||||||
|
|
||||||
##### getWindowY()
|
|
||||||
|
|
||||||
Returns the window's y position
|
|
||||||
|
|
||||||
##### getScreenWidth()
|
|
||||||
|
|
||||||
Returns the width of the screen
|
|
||||||
|
|
||||||
##### getScreenHeight()
|
|
||||||
|
|
||||||
Returns the height of the screen
|
|
||||||
|
|
||||||
##### setWindowPos(int x, int y)
|
|
||||||
|
|
||||||
Sets the window's position
|
|
||||||
|
|
||||||
##### resizeWindow(int width, int height)
|
|
||||||
|
|
||||||
Resizes the window
|
|
128
source/Caching.hx
Normal file
128
source/Caching.hx
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
package;
|
||||||
|
|
||||||
|
import haxe.Exception;
|
||||||
|
import flixel.tweens.FlxEase;
|
||||||
|
import flixel.tweens.FlxTween;
|
||||||
|
import sys.FileSystem;
|
||||||
|
import sys.io.File;
|
||||||
|
import flixel.FlxG;
|
||||||
|
import flixel.FlxSprite;
|
||||||
|
import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond;
|
||||||
|
import flixel.addons.transition.FlxTransitionableState;
|
||||||
|
import flixel.addons.transition.TransitionData;
|
||||||
|
import flixel.graphics.FlxGraphic;
|
||||||
|
import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
|
import flixel.math.FlxPoint;
|
||||||
|
import flixel.math.FlxRect;
|
||||||
|
import flixel.util.FlxColor;
|
||||||
|
import flixel.util.FlxTimer;
|
||||||
|
import flixel.text.FlxText;
|
||||||
|
|
||||||
|
using StringTools;
|
||||||
|
|
||||||
|
class Caching extends MusicBeatState
|
||||||
|
{
|
||||||
|
var toBeDone = 0;
|
||||||
|
var done = 0;
|
||||||
|
|
||||||
|
var text:FlxText;
|
||||||
|
var kadeLogo:FlxSprite;
|
||||||
|
|
||||||
|
override function create()
|
||||||
|
{
|
||||||
|
FlxG.mouse.visible = false;
|
||||||
|
|
||||||
|
FlxG.worldBounds.set(0,0);
|
||||||
|
|
||||||
|
text = new FlxText(FlxG.width / 2, FlxG.height / 2 + 300,0,"Loading...");
|
||||||
|
text.size = 34;
|
||||||
|
text.alignment = FlxTextAlign.CENTER;
|
||||||
|
text.alpha = 0;
|
||||||
|
|
||||||
|
kadeLogo = new FlxSprite(FlxG.width / 2, FlxG.height / 2).loadGraphic(Paths.image('KadeEngineLogo'));
|
||||||
|
kadeLogo.x -= kadeLogo.width / 2;
|
||||||
|
kadeLogo.y -= kadeLogo.height / 2 + 100;
|
||||||
|
text.y -= kadeLogo.height / 2 - 125;
|
||||||
|
text.x -= 170;
|
||||||
|
kadeLogo.setGraphicSize(Std.int(kadeLogo.width * 0.6));
|
||||||
|
|
||||||
|
kadeLogo.alpha = 0;
|
||||||
|
|
||||||
|
add(kadeLogo);
|
||||||
|
add(text);
|
||||||
|
|
||||||
|
trace('starting caching..');
|
||||||
|
|
||||||
|
sys.thread.Thread.create(() -> {
|
||||||
|
cache();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
super.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
var calledDone = false;
|
||||||
|
|
||||||
|
override function update(elapsed)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (toBeDone != 0 && done != toBeDone)
|
||||||
|
{
|
||||||
|
var alpha = HelperFunctions.truncateFloat(done / toBeDone * 100,2) / 100;
|
||||||
|
kadeLogo.alpha = alpha;
|
||||||
|
text.alpha = alpha;
|
||||||
|
text.text = "Loading... (" + done + "/" + toBeDone + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
super.update(elapsed);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function cache()
|
||||||
|
{
|
||||||
|
|
||||||
|
var images = [];
|
||||||
|
var music = [];
|
||||||
|
|
||||||
|
trace("caching images...");
|
||||||
|
|
||||||
|
for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/shared/images/characters")))
|
||||||
|
{
|
||||||
|
if (!i.endsWith(".png"))
|
||||||
|
continue;
|
||||||
|
images.push(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
trace("caching music...");
|
||||||
|
|
||||||
|
for (i in FileSystem.readDirectory(FileSystem.absolutePath("assets/songs")))
|
||||||
|
{
|
||||||
|
music.push(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
toBeDone = Lambda.count(images) + Lambda.count(music);
|
||||||
|
|
||||||
|
trace("LOADING: " + toBeDone + " OBJECTS.");
|
||||||
|
|
||||||
|
for (i in images)
|
||||||
|
{
|
||||||
|
var replaced = i.replace(".png","");
|
||||||
|
FlxG.bitmap.add(Paths.image("characters/" + replaced,"shared"));
|
||||||
|
trace("cached " + replaced);
|
||||||
|
done++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i in music)
|
||||||
|
{
|
||||||
|
FlxG.sound.cache(Paths.inst(i));
|
||||||
|
FlxG.sound.cache(Paths.voices(i));
|
||||||
|
trace("cached " + i);
|
||||||
|
done++;
|
||||||
|
}
|
||||||
|
|
||||||
|
trace("Finished caching...");
|
||||||
|
|
||||||
|
FlxG.switchState(new TitleState());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
7
source/GameDimensions.hx
Normal file
7
source/GameDimensions.hx
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package;
|
||||||
|
|
||||||
|
class GameDimensions
|
||||||
|
{
|
||||||
|
public static var width:Int = 1280;
|
||||||
|
public static var height:Int = 720;
|
||||||
|
}
|
95
source/GlobalVideo.hx
Normal file
95
source/GlobalVideo.hx
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
package;
|
||||||
|
|
||||||
|
import openfl.Lib;
|
||||||
|
|
||||||
|
class GlobalVideo
|
||||||
|
{
|
||||||
|
private static var video:VideoHandler;
|
||||||
|
private static var webm:WebmHandler;
|
||||||
|
public static var isWebm:Bool = false;
|
||||||
|
public static var isAndroid:Bool = false;
|
||||||
|
public static var daAlpha1:Float = 0.2;
|
||||||
|
public static var daAlpha2:Float = 1;
|
||||||
|
|
||||||
|
public static function setVid(vid:VideoHandler):Void
|
||||||
|
{
|
||||||
|
video = vid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getVid():VideoHandler
|
||||||
|
{
|
||||||
|
return video;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function setWebm(vid:WebmHandler):Void
|
||||||
|
{
|
||||||
|
webm = vid;
|
||||||
|
isWebm = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getWebm():WebmHandler
|
||||||
|
{
|
||||||
|
return webm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function get():Dynamic
|
||||||
|
{
|
||||||
|
if (isWebm)
|
||||||
|
{
|
||||||
|
return getWebm();
|
||||||
|
} else {
|
||||||
|
return getVid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function calc(ind:Int):Dynamic
|
||||||
|
{
|
||||||
|
var stageWidth:Int = Lib.current.stage.stageWidth;
|
||||||
|
var stageHeight:Int = Lib.current.stage.stageHeight;
|
||||||
|
|
||||||
|
var width:Float = GameDimensions.width;
|
||||||
|
var height:Float = GameDimensions.height;
|
||||||
|
|
||||||
|
//trace("AH: " + stageWidth);
|
||||||
|
//trace(width);
|
||||||
|
|
||||||
|
var ratioX:Float = height / width;
|
||||||
|
var ratioY:Float = width / height;
|
||||||
|
var appliedWidth:Float = stageHeight * ratioY;
|
||||||
|
var appliedHeight:Float = stageWidth * ratioX;
|
||||||
|
//trace(appliedWidth);
|
||||||
|
var remainingX:Float = stageWidth - appliedWidth;
|
||||||
|
var remainingY:Float = stageHeight - appliedHeight;
|
||||||
|
remainingX = remainingX / 2;
|
||||||
|
remainingY = remainingY / 2;
|
||||||
|
|
||||||
|
appliedWidth = Std.int(appliedWidth);
|
||||||
|
appliedHeight = Std.int(appliedHeight);
|
||||||
|
|
||||||
|
if (appliedHeight > stageHeight)
|
||||||
|
{
|
||||||
|
remainingY = 0;
|
||||||
|
appliedHeight = stageHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (appliedWidth > stageWidth)
|
||||||
|
{
|
||||||
|
remainingX = 0;
|
||||||
|
appliedWidth = stageWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(ind)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return remainingX;
|
||||||
|
case 1:
|
||||||
|
return remainingY;
|
||||||
|
case 2:
|
||||||
|
return appliedWidth;
|
||||||
|
case 3:
|
||||||
|
return appliedHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,7 @@
|
|||||||
package;
|
package;
|
||||||
|
|
||||||
|
|
||||||
|
import webm.WebmPlayer;
|
||||||
import openfl.display.BlendMode;
|
import openfl.display.BlendMode;
|
||||||
import openfl.text.TextFormat;
|
import openfl.text.TextFormat;
|
||||||
import openfl.display.Application;
|
import openfl.display.Application;
|
||||||
@ -49,6 +51,8 @@ class Main extends Sprite
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static var webmHandler:WebmHandler;
|
||||||
|
|
||||||
private function init(?E:Event):Void
|
private function init(?E:Event):Void
|
||||||
{
|
{
|
||||||
if (hasEventListener(Event.ADDED_TO_STAGE))
|
if (hasEventListener(Event.ADDED_TO_STAGE))
|
||||||
@ -73,10 +77,8 @@ class Main extends Sprite
|
|||||||
gameHeight = Math.ceil(stageHeight / zoom);
|
gameHeight = Math.ceil(stageHeight / zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !debug
|
initialState = Caching;
|
||||||
initialState = TitleState;
|
|
||||||
#end
|
|
||||||
|
|
||||||
game = new FlxGame(gameWidth, gameHeight, initialState, zoom, framerate, framerate, skipSplash, startFullscreen);
|
game = new FlxGame(gameWidth, gameHeight, initialState, zoom, framerate, framerate, skipSplash, startFullscreen);
|
||||||
|
|
||||||
addChild(game);
|
addChild(game);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// this file is for modchart things, this is to declutter playstate.hx
|
// this file is for modchart things, this is to declutter playstate.hx
|
||||||
|
|
||||||
// Lua
|
// Lua
|
||||||
|
import openfl.display3D.textures.VideoTexture;
|
||||||
import flixel.graphics.FlxGraphic;
|
import flixel.graphics.FlxGraphic;
|
||||||
import flixel.graphics.frames.FlxAtlasFrames;
|
import flixel.graphics.frames.FlxAtlasFrames;
|
||||||
#if windows
|
#if windows
|
||||||
@ -417,6 +418,33 @@ class ModchartState
|
|||||||
|
|
||||||
|
|
||||||
// hud/camera
|
// hud/camera
|
||||||
|
|
||||||
|
Lua_helper.add_callback(lua,"initBackgroundVideo", function(videoName:String) {
|
||||||
|
trace('playing assets/videos/' + videoName + '.webm');
|
||||||
|
PlayState.instance.backgroundVideo("assets/videos/" + videoName + ".webm");
|
||||||
|
});
|
||||||
|
|
||||||
|
Lua_helper.add_callback(lua,"pauseVideo", function() {
|
||||||
|
if (!GlobalVideo.get().paused)
|
||||||
|
GlobalVideo.get().pause();
|
||||||
|
});
|
||||||
|
|
||||||
|
Lua_helper.add_callback(lua,"resumeVideo", function() {
|
||||||
|
if (GlobalVideo.get().paused)
|
||||||
|
GlobalVideo.get().pause();
|
||||||
|
});
|
||||||
|
|
||||||
|
Lua_helper.add_callback(lua,"restartVideo", function() {
|
||||||
|
GlobalVideo.get().restart();
|
||||||
|
});
|
||||||
|
|
||||||
|
Lua_helper.add_callback(lua,"setVideoSpritePos", function(x:Int,y:Int) {
|
||||||
|
PlayState.instance.videoSprite.setPosition(x,y);
|
||||||
|
});
|
||||||
|
|
||||||
|
Lua_helper.add_callback(lua,"setVideoSpriteScale", function(scale:Float) {
|
||||||
|
PlayState.instance.videoSprite.setGraphicSize(Std.int(PlayState.instance.videoSprite.width * scale));
|
||||||
|
});
|
||||||
|
|
||||||
Lua_helper.add_callback(lua,"setHudAngle", function (x:Float) {
|
Lua_helper.add_callback(lua,"setHudAngle", function (x:Float) {
|
||||||
PlayState.instance.camHUD.angle = x;
|
PlayState.instance.camHUD.angle = x;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package;
|
package;
|
||||||
|
|
||||||
|
import webm.WebmPlayer;
|
||||||
import flixel.input.keyboard.FlxKey;
|
import flixel.input.keyboard.FlxKey;
|
||||||
import haxe.Exception;
|
import haxe.Exception;
|
||||||
import openfl.geom.Matrix;
|
import openfl.geom.Matrix;
|
||||||
@ -1344,6 +1345,9 @@ class PlayState extends MusicBeatState
|
|||||||
case 'Bopeebo' | 'Philly Nice' | 'Blammed' | 'Cocoa' | 'Eggnog': allowedToHeadbang = true;
|
case 'Bopeebo' | 'Philly Nice' | 'Blammed' | 'Cocoa' | 'Eggnog': allowedToHeadbang = true;
|
||||||
default: allowedToHeadbang = false;
|
default: allowedToHeadbang = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (useVideo)
|
||||||
|
GlobalVideo.get().resume();
|
||||||
|
|
||||||
#if windows
|
#if windows
|
||||||
// Updating Discord Rich Presence (with Time Left)
|
// Updating Discord Rich Presence (with Time Left)
|
||||||
@ -1506,16 +1510,6 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
switch (Math.abs(i))
|
switch (Math.abs(i))
|
||||||
{
|
{
|
||||||
case 0:
|
|
||||||
babyArrow.x += Note.swagWidth * 0;
|
|
||||||
babyArrow.animation.add('static', [0]);
|
|
||||||
babyArrow.animation.add('pressed', [4, 8], 12, false);
|
|
||||||
babyArrow.animation.add('confirm', [12, 16], 24, false);
|
|
||||||
case 1:
|
|
||||||
babyArrow.x += Note.swagWidth * 1;
|
|
||||||
babyArrow.animation.add('static', [1]);
|
|
||||||
babyArrow.animation.add('pressed', [5, 9], 12, false);
|
|
||||||
babyArrow.animation.add('confirm', [13, 17], 24, false);
|
|
||||||
case 2:
|
case 2:
|
||||||
babyArrow.x += Note.swagWidth * 2;
|
babyArrow.x += Note.swagWidth * 2;
|
||||||
babyArrow.animation.add('static', [2]);
|
babyArrow.animation.add('static', [2]);
|
||||||
@ -1526,75 +1520,85 @@ class PlayState extends MusicBeatState
|
|||||||
babyArrow.animation.add('static', [3]);
|
babyArrow.animation.add('static', [3]);
|
||||||
babyArrow.animation.add('pressed', [7, 11], 12, false);
|
babyArrow.animation.add('pressed', [7, 11], 12, false);
|
||||||
babyArrow.animation.add('confirm', [15, 19], 24, false);
|
babyArrow.animation.add('confirm', [15, 19], 24, false);
|
||||||
|
case 1:
|
||||||
|
babyArrow.x += Note.swagWidth * 1;
|
||||||
|
babyArrow.animation.add('static', [1]);
|
||||||
|
babyArrow.animation.add('pressed', [5, 9], 12, false);
|
||||||
|
babyArrow.animation.add('confirm', [13, 17], 24, false);
|
||||||
|
case 0:
|
||||||
|
babyArrow.x += Note.swagWidth * 0;
|
||||||
|
babyArrow.animation.add('static', [0]);
|
||||||
|
babyArrow.animation.add('pressed', [4, 8], 12, false);
|
||||||
|
babyArrow.animation.add('confirm', [12, 16], 24, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'normal':
|
case 'normal':
|
||||||
babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets');
|
babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets');
|
||||||
babyArrow.animation.addByPrefix('green', 'arrowUP');
|
babyArrow.animation.addByPrefix('green', 'arrowUP');
|
||||||
babyArrow.animation.addByPrefix('blue', 'arrowDOWN');
|
babyArrow.animation.addByPrefix('blue', 'arrowDOWN');
|
||||||
babyArrow.animation.addByPrefix('purple', 'arrowLEFT');
|
babyArrow.animation.addByPrefix('purple', 'arrowLEFT');
|
||||||
babyArrow.animation.addByPrefix('red', 'arrowRIGHT');
|
babyArrow.animation.addByPrefix('red', 'arrowRIGHT');
|
||||||
|
|
||||||
|
babyArrow.antialiasing = true;
|
||||||
|
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
|
||||||
|
|
||||||
|
switch (Math.abs(i))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
babyArrow.x += Note.swagWidth * 0;
|
||||||
|
babyArrow.animation.addByPrefix('static', 'arrowLEFT');
|
||||||
|
babyArrow.animation.addByPrefix('pressed', 'left press', 24, false);
|
||||||
|
babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false);
|
||||||
|
case 1:
|
||||||
|
babyArrow.x += Note.swagWidth * 1;
|
||||||
|
babyArrow.animation.addByPrefix('static', 'arrowDOWN');
|
||||||
|
babyArrow.animation.addByPrefix('pressed', 'down press', 24, false);
|
||||||
|
babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false);
|
||||||
|
case 2:
|
||||||
|
babyArrow.x += Note.swagWidth * 2;
|
||||||
|
babyArrow.animation.addByPrefix('static', 'arrowUP');
|
||||||
|
babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);
|
||||||
|
babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);
|
||||||
|
case 3:
|
||||||
|
babyArrow.x += Note.swagWidth * 3;
|
||||||
|
babyArrow.animation.addByPrefix('static', 'arrowRIGHT');
|
||||||
|
babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);
|
||||||
|
babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false);
|
||||||
|
}
|
||||||
|
|
||||||
babyArrow.antialiasing = true;
|
default:
|
||||||
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
|
babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets');
|
||||||
|
babyArrow.animation.addByPrefix('green', 'arrowUP');
|
||||||
|
babyArrow.animation.addByPrefix('blue', 'arrowDOWN');
|
||||||
|
babyArrow.animation.addByPrefix('purple', 'arrowLEFT');
|
||||||
|
babyArrow.animation.addByPrefix('red', 'arrowRIGHT');
|
||||||
|
|
||||||
switch (Math.abs(i))
|
babyArrow.antialiasing = true;
|
||||||
{
|
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
|
||||||
case 0:
|
|
||||||
babyArrow.x += Note.swagWidth * 0;
|
switch (Math.abs(i))
|
||||||
babyArrow.animation.addByPrefix('static', 'arrowLEFT');
|
{
|
||||||
babyArrow.animation.addByPrefix('pressed', 'left press', 24, false);
|
case 0:
|
||||||
babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false);
|
babyArrow.x += Note.swagWidth * 0;
|
||||||
case 1:
|
babyArrow.animation.addByPrefix('static', 'arrowLEFT');
|
||||||
babyArrow.x += Note.swagWidth * 1;
|
babyArrow.animation.addByPrefix('pressed', 'left press', 24, false);
|
||||||
babyArrow.animation.addByPrefix('static', 'arrowDOWN');
|
babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false);
|
||||||
babyArrow.animation.addByPrefix('pressed', 'down press', 24, false);
|
case 1:
|
||||||
babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false);
|
babyArrow.x += Note.swagWidth * 1;
|
||||||
case 2:
|
babyArrow.animation.addByPrefix('static', 'arrowDOWN');
|
||||||
babyArrow.x += Note.swagWidth * 2;
|
babyArrow.animation.addByPrefix('pressed', 'down press', 24, false);
|
||||||
babyArrow.animation.addByPrefix('static', 'arrowUP');
|
babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false);
|
||||||
babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);
|
case 2:
|
||||||
babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);
|
babyArrow.x += Note.swagWidth * 2;
|
||||||
case 3:
|
babyArrow.animation.addByPrefix('static', 'arrowUP');
|
||||||
babyArrow.x += Note.swagWidth * 3;
|
babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);
|
||||||
babyArrow.animation.addByPrefix('static', 'arrowRIGHT');
|
babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);
|
||||||
babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);
|
case 3:
|
||||||
babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false);
|
babyArrow.x += Note.swagWidth * 3;
|
||||||
|
babyArrow.animation.addByPrefix('static', 'arrowRIGHT');
|
||||||
|
babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);
|
||||||
|
babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
|
||||||
babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets');
|
|
||||||
babyArrow.animation.addByPrefix('green', 'arrowUP');
|
|
||||||
babyArrow.animation.addByPrefix('blue', 'arrowDOWN');
|
|
||||||
babyArrow.animation.addByPrefix('purple', 'arrowLEFT');
|
|
||||||
babyArrow.animation.addByPrefix('red', 'arrowRIGHT');
|
|
||||||
|
|
||||||
babyArrow.antialiasing = true;
|
|
||||||
babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));
|
|
||||||
|
|
||||||
switch (Math.abs(i))
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
babyArrow.x += Note.swagWidth * 0;
|
|
||||||
babyArrow.animation.addByPrefix('static', 'arrowLEFT');
|
|
||||||
babyArrow.animation.addByPrefix('pressed', 'left press', 24, false);
|
|
||||||
babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false);
|
|
||||||
case 1:
|
|
||||||
babyArrow.x += Note.swagWidth * 1;
|
|
||||||
babyArrow.animation.addByPrefix('static', 'arrowDOWN');
|
|
||||||
babyArrow.animation.addByPrefix('pressed', 'down press', 24, false);
|
|
||||||
babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false);
|
|
||||||
case 2:
|
|
||||||
babyArrow.x += Note.swagWidth * 2;
|
|
||||||
babyArrow.animation.addByPrefix('static', 'arrowUP');
|
|
||||||
babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);
|
|
||||||
babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);
|
|
||||||
case 3:
|
|
||||||
babyArrow.x += Note.swagWidth * 3;
|
|
||||||
babyArrow.animation.addByPrefix('static', 'arrowRIGHT');
|
|
||||||
babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);
|
|
||||||
babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
babyArrow.updateHitbox();
|
babyArrow.updateHitbox();
|
||||||
@ -1706,6 +1710,9 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
public static var songRate = 1.5;
|
public static var songRate = 1.5;
|
||||||
|
|
||||||
|
public var stopUpdate = false;
|
||||||
|
public var removedVideo = false;
|
||||||
|
|
||||||
override public function update(elapsed:Float)
|
override public function update(elapsed:Float)
|
||||||
{
|
{
|
||||||
#if !debug
|
#if !debug
|
||||||
@ -1715,6 +1722,18 @@ class PlayState extends MusicBeatState
|
|||||||
if (FlxG.save.data.botplay && FlxG.keys.justPressed.ONE)
|
if (FlxG.save.data.botplay && FlxG.keys.justPressed.ONE)
|
||||||
camHUD.visible = !camHUD.visible;
|
camHUD.visible = !camHUD.visible;
|
||||||
|
|
||||||
|
|
||||||
|
if (useVideo && GlobalVideo.get() != null && !stopUpdate)
|
||||||
|
{
|
||||||
|
if (GlobalVideo.get().ended && !removedVideo)
|
||||||
|
{
|
||||||
|
remove(videoSprite);
|
||||||
|
removedVideo = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if windows
|
#if windows
|
||||||
if (executeModchart && luaModchart != null && songStarted)
|
if (executeModchart && luaModchart != null && songStarted)
|
||||||
{
|
{
|
||||||
@ -1838,6 +1857,12 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
if (FlxG.keys.justPressed.SEVEN)
|
if (FlxG.keys.justPressed.SEVEN)
|
||||||
{
|
{
|
||||||
|
if (useVideo)
|
||||||
|
{
|
||||||
|
GlobalVideo.get().stop();
|
||||||
|
remove(videoSprite);
|
||||||
|
removedVideo = true;
|
||||||
|
}
|
||||||
#if windows
|
#if windows
|
||||||
DiscordClient.changePresence("Chart Editor", null, null, true);
|
DiscordClient.changePresence("Chart Editor", null, null, true);
|
||||||
#end
|
#end
|
||||||
@ -1883,6 +1908,13 @@ class PlayState extends MusicBeatState
|
|||||||
#if debug
|
#if debug
|
||||||
if (FlxG.keys.justPressed.EIGHT)
|
if (FlxG.keys.justPressed.EIGHT)
|
||||||
{
|
{
|
||||||
|
if (useVideo)
|
||||||
|
{
|
||||||
|
GlobalVideo.get().stop();
|
||||||
|
remove(videoSprite);
|
||||||
|
removedVideo = true;
|
||||||
|
}
|
||||||
|
|
||||||
FlxG.switchState(new AnimationDebug(SONG.player2));
|
FlxG.switchState(new AnimationDebug(SONG.player2));
|
||||||
#if windows
|
#if windows
|
||||||
if (luaModchart != null)
|
if (luaModchart != null)
|
||||||
@ -2433,6 +2465,12 @@ class PlayState extends MusicBeatState
|
|||||||
|
|
||||||
function endSong():Void
|
function endSong():Void
|
||||||
{
|
{
|
||||||
|
if (useVideo)
|
||||||
|
{
|
||||||
|
GlobalVideo.get().stop();
|
||||||
|
PlayState.instance.remove(PlayState.instance.videoSprite);
|
||||||
|
}
|
||||||
|
|
||||||
if (!loadRep)
|
if (!loadRep)
|
||||||
rep.SaveReplay(saveNotes);
|
rep.SaveReplay(saveNotes);
|
||||||
else
|
else
|
||||||
@ -3066,6 +3104,66 @@ class PlayState extends MusicBeatState
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public var fuckingVolume:Float = 1;
|
||||||
|
public var useVideo = false;
|
||||||
|
|
||||||
|
public static var webmHandler:WebmHandler;
|
||||||
|
|
||||||
|
public var playingDathing = false;
|
||||||
|
|
||||||
|
public var videoSprite:FlxSprite;
|
||||||
|
|
||||||
|
public function backgroundVideo(source:String) // for background videos
|
||||||
|
{
|
||||||
|
useVideo = true;
|
||||||
|
|
||||||
|
var ourSource:String = "assets/videos/daWeirdVid/dontDelete.webm";
|
||||||
|
WebmPlayer.SKIP_STEP_LIMIT = 90;
|
||||||
|
var str1:String = "WEBM SHIT";
|
||||||
|
webmHandler = new WebmHandler();
|
||||||
|
webmHandler.source(ourSource);
|
||||||
|
webmHandler.makePlayer();
|
||||||
|
webmHandler.webm.name = str1;
|
||||||
|
|
||||||
|
GlobalVideo.setWebm(webmHandler);
|
||||||
|
|
||||||
|
GlobalVideo.get().source(source);
|
||||||
|
GlobalVideo.get().clearPause();
|
||||||
|
if (GlobalVideo.isWebm)
|
||||||
|
{
|
||||||
|
GlobalVideo.get().updatePlayer();
|
||||||
|
}
|
||||||
|
GlobalVideo.get().show();
|
||||||
|
|
||||||
|
if (GlobalVideo.isWebm)
|
||||||
|
{
|
||||||
|
GlobalVideo.get().restart();
|
||||||
|
} else {
|
||||||
|
GlobalVideo.get().play();
|
||||||
|
}
|
||||||
|
|
||||||
|
var data = webmHandler.webm.bitmapData;
|
||||||
|
|
||||||
|
videoSprite = new FlxSprite(-470,-30).loadGraphic(data);
|
||||||
|
|
||||||
|
videoSprite.setGraphicSize(Std.int(videoSprite.width * 1.2));
|
||||||
|
|
||||||
|
remove(gf);
|
||||||
|
remove(boyfriend);
|
||||||
|
remove(dad);
|
||||||
|
add(videoSprite);
|
||||||
|
add(gf);
|
||||||
|
add(boyfriend);
|
||||||
|
add(dad);
|
||||||
|
|
||||||
|
trace('poggers');
|
||||||
|
|
||||||
|
if (!songStarted)
|
||||||
|
webmHandler.pause();
|
||||||
|
else
|
||||||
|
webmHandler.resume();
|
||||||
|
}
|
||||||
|
|
||||||
function noteMiss(direction:Int = 1, daNote:Note):Void
|
function noteMiss(direction:Int = 1, daNote:Note):Void
|
||||||
{
|
{
|
||||||
if (!boyfriend.stunned)
|
if (!boyfriend.stunned)
|
||||||
|
195
source/VideoHandler.hx
Normal file
195
source/VideoHandler.hx
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
//This was made by GWebDev lol btw this uses actuate
|
||||||
|
package;
|
||||||
|
|
||||||
|
import motion.Actuate;
|
||||||
|
import openfl.display.Sprite;
|
||||||
|
import openfl.events.AsyncErrorEvent;
|
||||||
|
import openfl.events.MouseEvent;
|
||||||
|
import openfl.events.NetStatusEvent;
|
||||||
|
import openfl.media.Video;
|
||||||
|
import openfl.net.NetConnection;
|
||||||
|
import openfl.net.NetStream;
|
||||||
|
import flixel.FlxG;
|
||||||
|
|
||||||
|
using StringTools;
|
||||||
|
|
||||||
|
class VideoHandler
|
||||||
|
{
|
||||||
|
public var netStream:NetStream;
|
||||||
|
public var video:Video;
|
||||||
|
public var isReady:Bool = false;
|
||||||
|
public var addOverlay:Bool = false;
|
||||||
|
public var vidPath:String = "";
|
||||||
|
public var ignoreShit:Bool = false;
|
||||||
|
|
||||||
|
public function new()
|
||||||
|
{
|
||||||
|
isReady = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function source(?vPath:String):Void
|
||||||
|
{
|
||||||
|
if (vPath != null && vPath.length > 0)
|
||||||
|
{
|
||||||
|
vidPath = vPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function init1():Void
|
||||||
|
{
|
||||||
|
isReady = false;
|
||||||
|
video = new Video();
|
||||||
|
video.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function init2():Void
|
||||||
|
{
|
||||||
|
#if web
|
||||||
|
var netConnection = new NetConnection ();
|
||||||
|
netConnection.connect (null);
|
||||||
|
|
||||||
|
netStream = new NetStream (netConnection);
|
||||||
|
netStream.client = { onMetaData: client_onMetaData };
|
||||||
|
netStream.addEventListener (AsyncErrorEvent.ASYNC_ERROR, netStream_onAsyncError);
|
||||||
|
|
||||||
|
netConnection.addEventListener (NetStatusEvent.NET_STATUS, netConnection_onNetStatus);
|
||||||
|
netConnection.addEventListener (NetStatusEvent.NET_STATUS, onPlay);
|
||||||
|
netConnection.addEventListener (NetStatusEvent.NET_STATUS, onEnd);
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
|
||||||
|
public function client_onMetaData (metaData:Dynamic) {
|
||||||
|
|
||||||
|
video.attachNetStream (netStream);
|
||||||
|
|
||||||
|
video.width = FlxG.width;
|
||||||
|
video.height = FlxG.height;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function netStream_onAsyncError (event:AsyncErrorEvent):Void {
|
||||||
|
|
||||||
|
trace ("Error loading video");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function netConnection_onNetStatus (event:NetStatusEvent):Void {
|
||||||
|
trace (event.info.code);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function play():Void
|
||||||
|
{
|
||||||
|
#if web
|
||||||
|
ignoreShit = true;
|
||||||
|
netStream.close();
|
||||||
|
init2();
|
||||||
|
netStream.play(vidPath);
|
||||||
|
ignoreShit = false;
|
||||||
|
#end
|
||||||
|
trace(vidPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stop():Void
|
||||||
|
{
|
||||||
|
netStream.close();
|
||||||
|
onStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function restart():Void
|
||||||
|
{
|
||||||
|
play();
|
||||||
|
onRestart();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(elapsed:Float):Void
|
||||||
|
{
|
||||||
|
video.x = GlobalVideo.calc(0);
|
||||||
|
video.y = GlobalVideo.calc(1);
|
||||||
|
video.width = GlobalVideo.calc(2);
|
||||||
|
video.height = GlobalVideo.calc(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public var stopped:Bool = false;
|
||||||
|
public var restarted:Bool = false;
|
||||||
|
public var played:Bool = false;
|
||||||
|
public var ended:Bool = false;
|
||||||
|
public var paused:Bool = false;
|
||||||
|
|
||||||
|
public function pause():Void
|
||||||
|
{
|
||||||
|
netStream.pause();
|
||||||
|
paused = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function resume():Void
|
||||||
|
{
|
||||||
|
netStream.resume();
|
||||||
|
paused = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function togglePause():Void
|
||||||
|
{
|
||||||
|
if (paused)
|
||||||
|
{
|
||||||
|
resume();
|
||||||
|
} else {
|
||||||
|
pause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function clearPause():Void
|
||||||
|
{
|
||||||
|
paused = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onStop():Void
|
||||||
|
{
|
||||||
|
if (!ignoreShit)
|
||||||
|
{
|
||||||
|
stopped = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onRestart():Void
|
||||||
|
{
|
||||||
|
restarted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onPlay(event:NetStatusEvent):Void
|
||||||
|
{
|
||||||
|
if (event.info.code == "NetStream.Play.Start")
|
||||||
|
{
|
||||||
|
played = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onEnd(event:NetStatusEvent):Void
|
||||||
|
{
|
||||||
|
if (event.info.code == "NetStream.Play.Complete")
|
||||||
|
{
|
||||||
|
ended = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function alpha():Void
|
||||||
|
{
|
||||||
|
video.alpha = GlobalVideo.daAlpha1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unalpha():Void
|
||||||
|
{
|
||||||
|
video.alpha = GlobalVideo.daAlpha2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hide():Void
|
||||||
|
{
|
||||||
|
video.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function show():Void
|
||||||
|
{
|
||||||
|
video.visible = true;
|
||||||
|
}
|
||||||
|
}
|
169
source/WebmHandler.hx
Normal file
169
source/WebmHandler.hx
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
package;
|
||||||
|
|
||||||
|
import flixel.FlxG;
|
||||||
|
import openfl.display.Sprite;
|
||||||
|
#if desktop
|
||||||
|
import webm.*;
|
||||||
|
#end
|
||||||
|
|
||||||
|
class WebmHandler
|
||||||
|
{
|
||||||
|
#if desktop
|
||||||
|
public var webm:WebmPlayer;
|
||||||
|
public var vidPath:String = "";
|
||||||
|
public var io:WebmIo;
|
||||||
|
public var initialized:Bool = false;
|
||||||
|
|
||||||
|
public function new()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function source(?vPath:String):Void
|
||||||
|
{
|
||||||
|
if (vPath != null && vPath.length > 0)
|
||||||
|
{
|
||||||
|
vidPath = vPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function makePlayer():Void
|
||||||
|
{
|
||||||
|
io = new WebmIoFile(vidPath);
|
||||||
|
webm = new WebmPlayer();
|
||||||
|
webm.fuck(io, false);
|
||||||
|
webm.addEventListener(WebmEvent.PLAY, function(e) {
|
||||||
|
onPlay();
|
||||||
|
});
|
||||||
|
webm.addEventListener(WebmEvent.COMPLETE, function(e) {
|
||||||
|
onEnd();
|
||||||
|
});
|
||||||
|
webm.addEventListener(WebmEvent.STOP, function(e) {
|
||||||
|
onStop();
|
||||||
|
});
|
||||||
|
webm.addEventListener(WebmEvent.RESTART, function(e) {
|
||||||
|
onRestart();
|
||||||
|
});
|
||||||
|
webm.visible = false;
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updatePlayer():Void
|
||||||
|
{
|
||||||
|
io = new WebmIoFile(vidPath);
|
||||||
|
webm.fuck(io, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function play():Void
|
||||||
|
{
|
||||||
|
if (initialized)
|
||||||
|
{
|
||||||
|
webm.play();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stop():Void
|
||||||
|
{
|
||||||
|
if (initialized)
|
||||||
|
{
|
||||||
|
webm.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function restart():Void
|
||||||
|
{
|
||||||
|
if (initialized)
|
||||||
|
{
|
||||||
|
webm.restart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(elapsed:Float)
|
||||||
|
{
|
||||||
|
webm.x = GlobalVideo.calc(0);
|
||||||
|
webm.y = GlobalVideo.calc(1);
|
||||||
|
webm.width = GlobalVideo.calc(2);
|
||||||
|
webm.height = GlobalVideo.calc(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public var stopped:Bool = false;
|
||||||
|
public var restarted:Bool = false;
|
||||||
|
public var played:Bool = false;
|
||||||
|
public var ended:Bool = false;
|
||||||
|
public var paused:Bool = false;
|
||||||
|
|
||||||
|
public function pause():Void
|
||||||
|
{
|
||||||
|
webm.changePlaying(false);
|
||||||
|
paused = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function resume():Void
|
||||||
|
{
|
||||||
|
webm.changePlaying(true);
|
||||||
|
paused = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function togglePause():Void
|
||||||
|
{
|
||||||
|
if (paused)
|
||||||
|
{
|
||||||
|
resume();
|
||||||
|
} else {
|
||||||
|
pause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function clearPause():Void
|
||||||
|
{
|
||||||
|
paused = false;
|
||||||
|
webm.removePause();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onStop():Void
|
||||||
|
{
|
||||||
|
stopped = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onRestart():Void
|
||||||
|
{
|
||||||
|
restarted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onPlay():Void
|
||||||
|
{
|
||||||
|
played = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onEnd():Void
|
||||||
|
{
|
||||||
|
trace("IT ENDED!");
|
||||||
|
ended = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function alpha():Void
|
||||||
|
{
|
||||||
|
webm.alpha = GlobalVideo.daAlpha1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unalpha():Void
|
||||||
|
{
|
||||||
|
webm.alpha = GlobalVideo.daAlpha2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hide():Void
|
||||||
|
{
|
||||||
|
webm.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function show():Void
|
||||||
|
{
|
||||||
|
webm.visible = true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
public var webm:Sprite;
|
||||||
|
public function new()
|
||||||
|
{
|
||||||
|
trace("THIS IS ANDROID! or some shit...");
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user