Skip to content

Commit

Permalink
release Furnace Pro
Browse files Browse the repository at this point in the history
  • Loading branch information
tildearrow committed Apr 1, 2023
1 parent 6fe8bea commit 2255bdf
Show file tree
Hide file tree
Showing 12 changed files with 8,242 additions and 450 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,7 @@ src/engine/playback.cpp
src/engine/sample.cpp
src/engine/song.cpp
src/engine/sysDef.cpp
src/engine/watermark.cpp
src/engine/wavetable.cpp
src/engine/waveSynth.cpp
src/engine/vgmOps.cpp
Expand Down
98 changes: 1 addition & 97 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,99 +1,3 @@
# Contributing

contributions to Furnace are welcome!

# Getting ready

log into your Github account, and click the Fork button in the header of the project's page.

then open a terminal and clone your fork:

```
git clone git@github.com:USERNAME/furnace.git
```

(replace `USERNAME` with your username)

# Working

## Code

bug fixes, improvements and several other things accepted.

the coding style is described here:

- indentation: two spaces. **strictly** spaces. do NOT use tabs.
- modified 1TBS style:
- no spaces in function calls
- spaces between arguments in function declarations
- no spaces in operations except for `||` and `&&`
- no space between variable name and assignment
- space between macro in string literals
- space after comment delimiter
- C++ pointer style: `void* variable` rather than `void *variable`
- indent switch cases
- preprocessor directives not intended
- if macro comprises more than one line, indent
- no new line after `template<>`
- prefer built-in types:
- `bool`
- `signed char` or `unsigned char` are 8-bit
- when the type is `char`, **always** specify whether it is signed or not.
- unspecified `char` is signed on x86 and unsigned on ARM, so yeah.
- the only situation in where unspecified `char` is allowed is for C strings (`const char*`).
- `short` or `unsigned short` are 16-bit
- `int` or `unsigned int` are 32-bit
- `float` is 32-bit
- `double` is 64-bit
- `long long int` or `unsigned long long int` are 64-bit
- avoid using 64-bit numbers as I still build for 32-bit systems.
- two `long`s are required to make Windows happy.
- `size_t` are 32-bit or 64-bit, depending on architecture.
- in float/double operations, always use decimal and `f` if single-precision.
- e.g. `1.0f` or `1.0` instead of `1`.
- prefer `NULL` over `nullptr` or any other proprietary null.
- don't use `auto` unless needed.
- use `String` for `std::string` (this is typedef'd in ta-utils.h).
- prefer using operator for String (std::string) comparisons (a=="").
- if you have to work with C strings, only use safe C string operations:
- snprintf
- strncpy
- strncat
- any other operation which specifies a limit

some files (particularly the ones in `src/engine/platform/sound` and `extern/`) don't follow this style.

you don't have to follow this style. I will fix it after I accept your contribution.

additional guidelines:

- in general **strongly** avoid breaking compatibility.
- do not touch loadFur/saveFur unless you know what you're doing!
- new fields must be at the end of each block to ensure forward compatibility
- likewise, the instrument read/write functions in DivInstrument have to be handled carefully
- any change to the format requires a version bump (see `src/engine/engine.h`).
- do not bump the version number under any circumstances!
- if you are making major changes to the playback routine, make sure to test with older songs to ensure nothing breaks.
- I will run a test suite to make sure this is the case.
- if something breaks, you might want to add a compatibility flag (this requires changing the format though).
- do not use `#pragma once`.
- do not memcmp() structs.
- on a switch block, **always** put `default` last and not in any other position.
- I have fear of some C/C++ compilers ignoring the rest of cases upon hitting default.

## Demo Songs

just put your demo song in `demos/`! be noted there are some guidelines:

- avoid Nintendo song covers.
- avoid big label song covers.
- low effort compositions/covers may not be accepted at all.

# Finishing

after you've done your modifications, commit the changes and push.
then open your fork on GitHub and send a pull request.

# I don't know how to use Git but I want to contribute with a demo song

you can also contact me directly! [find me here.](https://tildearrow.org/?p=contact)
contributions to Furnace Pro are not welcome. try applying for a job at Furnace Headquarters instead?
Loading

0 comments on commit 2255bdf

Please sign in to comment.