Release 5.0

This commit is contained in:
Peccin 2018-04-30 23:30:09 -03:00
parent 03d1223365
commit aba18f7fb3
23 changed files with 154 additions and 62 deletions

View file

@ -1,35 +1,36 @@
# Javatari
## Javatari
**Javatari** is a new cross platform Atari 2600 emulator designed for the Web.
It's great for displaying games running inside webpages. You can launch the emulator and load ROMs with a single link.
And now you can play Atari 2600 games with touch controls on your Android/iOS device, even when offline!
Join friends in multiplayer games with the new NetPlay! function.
Please go to **http://javatari.org** to enjoy it online!
Refer to [**/doc**](https://github.com/ppeccin/javatari.js/tree/master/doc) for parameters reference and URL usage examples.
Refer to [**/release**](https://github.com/ppeccin/javatari.js/tree/master/release) for stable release files and deployment examples.
#### New in Version 4.0
#### New in Version 5.0
- Support for mobile iOS and Android devices
- Finally enjoy Atari 2600 games on your iPhone/iPad!
- Customizable Touch Controls, with Haptic feedback
- Install as a WebApp on iOS/Android/Desktop, then run offline!
- Open files from local storage, iCloud, Google Drive, Dropbox, web links
- Higher resolution GUI for high-density displays, Retina displays
- Menu navigation by keys. Easy GUI switches for most used options
- NetPlay! Connect several users on the same Virtual Atari Console over the internet
- Enjoy multiplayer gaming sessions with your friends online
- P2P connection with automatic network discovery, no worries with IPs and ports
- User interface for selecting Cartridge Mapper type
- Several improvements and fixes
### Features
- Cross platform HTML5/JS. Runs in any Browser, tested in Chrome/Firefox/Safari
- Support for mobile iOS and Android devices
- Finally enjoy Atari 2600 games on your iPhone/iPad
- Customizable Touch Controls for mobile devices (iOS, Android)
- Customizable Touch Controls for mobile devices with Haptic feedback
- Real Atari 2600 Console panel for a nostalgic feel!
- Install as a WebApp, then run offline
- Install as a WebApp on iOS/Android/Desktop, then run offline!
- Put Atari 2600 games in webpages easily
- Show games running with a single link to the Javatari page
- Drag & Drop system for loading files
- Open files from local storage, iCloud, Google Drive, Dropbox, web links
- Savestates support. Export and share Savestate files
- Fully customizable Joysticks, Joykeys and Touch controllers
- Adjustable speed, Pause and Frame-by-frame advance
@ -37,6 +38,26 @@ Refer to [**/release**](https://github.com/ppeccin/javatari.js/tree/master/relea
- Resizable Screen, Full Screen mode
- Javascript API for loading ROMs and Console control
## About the NetPlay! feature
Javatari 5.0 brings NetPlay!, in which any number of users may connect and control the same virtual Atari Console.
To access the feature, open the NetPlay! control dialog available on the System Menu (Power button).
One user must be the "Server" and start a NetPlay! Session. Just choose a name for the Session, or let the emulator generate it randomly, then hit "HOST".
Once the Session is started and active, other users may join the Session simply by entering the same Session name and hitting "JOIN".
All users connected have complete control over the machine, except that only the Server user may load/change media files (ROMs). All features of the emulator work during NetPlay!
Any Client user may leave the Session at any time, but only the Server user may end the Session completely.
Be careful not to make your Session name public! Anyone that knows your Session name will be able to join it while its active. Send the session name only to people you want to invite.
Another way of sharing your Session to users is sending them a link that will open the emulator and join the session automatically.
In the NetPlay! dialog, once you are Hosting a Session, there will be a link button on the upper right, that will generate the link and copy it to your clipboard.
**IMPORTANT:** NetPlay! performance is completely dependent on the network quality. The lower the network latency between users, the better. Higher bandwidths with higher latencies won't help much.
It uses a specialized P2P protocol, and tries to use STUN to traverse NATs/routers so users don't have to worry about IPs and opening ports. Use at your own risk! :-)
To make all this work seamlessly, Javatari uses modern Web technologies including WebRTC, which are supported by all major browsers and platforms.
Unfortunately, those technologies are still not available on Apple iOS, so NetPlay! will not work on iOS devices. Sorry but there is not much we can do about it, until Apple feels it should allow its customers to access those technologies.
## Javatari Configuration and Launch Options
Several parameters are available for customizing the emulator. They can be changed either directly in Javascript if you are hosting the emulator in your own page, or via URL Query Parameters if you are creating links or bookmarks to open the emulator, or just using it in your browser.
@ -98,18 +119,20 @@ http://javatari.org?ROM=http://gamesarchive.org/StarCastle.zip&FORMAT=FA2
| `CARTRIDGE_CHANGE_DISABLED` | false | Block user from changing Cartridges
| `SCREEN_RESIZE_DISABLED` | false | Block user from changing Screen size
| `SCREEN_FULLSCREEN_MODE` | -1 | FullScreen mode. -2: disabled; -1: auto; 0: off; 1: on
| `SCREEN_FILTER_MODE` | -1 | Screen CRT Filter level. -2: browser default; -1: auto; 0..3: smoothing level
| `SCREEN_CRT_MODE` | -1 | Screen CRT Phosphor Effect. -1: auto; 0: off; 1: on
| `SCREEN_FILTER_MODE` | -3 | Screen CRT Filter level. -3: user set (default auto); -2: browser default; -1: auto; 0..3: smoothing level
| `SCREEN_CRT_MODE` | 0 | Screen CRT Phosphor Effect. -1: auto; 0: off; 1: on
| `SCREEN_DEFAULT_SCALE` | -1 | Screen size. -1: auto; 0.5..N in 0.1 steps
| `SCREEN_DEFAULT_ASPECT` | 1 | Screen aspect ratio (width) in 0.1 steps
| `SCREEN_CANVAS_SIZE` | 2 | Internal canvas size factor. Don't change! :-)
| `SCREEN_CONTROL_BAR` | 1 | Screen Bottom Bar controls. 0: on hover; 1: always
| `SCREEN_FORCE_HOST_NATIVE_FPS` | -1 | Force host native video frequency. -1: auto-detect. Don't change! :-)
| `SCREEN_VSYNCH_MODE` | 1 | V-Synch mode. -1: disabled; 0: off; 1: on
| `AUDIO_MONITOR_BUFFER_BASE` | -1 | Audio buffer base size. 2: disable audio; -1: auto; 0: platform default; 1..6: base value. More buffer = more delay
| `SCREEN_VSYNCH_MODE` | -2 | V-Synch mode. -2: user set (default on); -1: disabled; 0: off; 1: on
| `AUDIO_MONITOR_BUFFER_BASE` | -3 | Audio buffer base size. -3: user set (default auto); -2: disable audio; -1: auto; 0: browser default; 1..6: base value. More buffer = more delay
| `AUDIO_MONITOR_BUFFER_SIZE` | -1 | Audio buffer size. -1: auto; 256, 512, 1024, 2048, 4096, 8192, 16384: buffer size. More buffer = more delay. Don't change! :-)
| `AUDIO_SIGNAL_BUFFER_RATIO` | 2 | Internal Audio Signal buffer based on Monitor buffer
| `AUDIO_SIGNAL_ADD_FRAMES` | 3 | Additional frames in internal Audio Signal buffer based on Monitor buffer
| `TOUCH_MODE` | 0 | Touch control. -1: disabled; 0: auto; 1: enabled at port 1; 2: enabled at port 2
| `PADDLES_MODE` | -1 | Paddle controls. -1: auto; 0: off; 1: on
| `TOUCH_MODE` | -1 | Touch controls. -1: auto; 0: disabled; 1: enabled; 2: enabled (swapped)
| `RESET` | 0 | If value = 1 clear all saved data on the client
| `PAGE_BACK_CSS` | -- | CSS to modify page background color. Applied to the body element

View file

@ -1,3 +1,63 @@
## Javatari
**Javatari** is a new cross platform Atari 2600 emulator designed for the Web.
It's great for displaying games running inside webpages. You can launch the emulator and load ROMs with a single link.
And now you can play Atari 2600 games with touch controls on your Android/iOS device, even when offline!
Join friends in multiplayer games with the new NetPlay! function.
Please go to **http://javatari.org** to enjoy it online!
Refer to [**/doc**](https://github.com/ppeccin/javatari.js/tree/master/doc) for parameters reference and URL usage examples.
Refer to [**/release**](https://github.com/ppeccin/javatari.js/tree/master/release) for stable release files and deployment examples.
#### New in Version 5.0
- NetPlay! Connect several users on the same Virtual Atari Console over the internet
- Enjoy multiplayer gaming sessions with your friends online
- P2P connection with automatic network discovery, no worries with IPs and ports
- User interface for selecting Cartridge Mapper type
- Several improvements and fixes
### Features
- Cross platform HTML5/JS. Runs in any Browser, tested in Chrome/Firefox/Safari
- Support for mobile iOS and Android devices
- Finally enjoy Atari 2600 games on your iPhone/iPad
- Customizable Touch Controls for mobile devices with Haptic feedback
- Real Atari 2600 Console panel for a nostalgic feel!
- Install as a WebApp on iOS/Android/Desktop, then run offline!
- Put Atari 2600 games in webpages easily
- Show games running with a single link to the Javatari page
- Drag & Drop system for loading files
- Open files from local storage, iCloud, Google Drive, Dropbox, web links
- Savestates support. Export and share Savestate files
- Fully customizable Joysticks, Joykeys and Touch controllers
- Adjustable speed, Pause and Frame-by-frame advance
- Screen Capture and Debug modes
- Resizable Screen, Full Screen mode
- Javascript API for loading ROMs and Console control
## About the NetPlay! feature
Javatari 5.0 brings NetPlay!, in which any number of users may connect and control the same virtual Atari Console.
To access the feature, open the NetPlay! control dialog available on the System Menu (Power button).
One user must be the "Server" and start a NetPlay! Session. Just choose a name for the Session, or let the emulator generate it randomly, then hit "HOST".
Once the Session is started and active, other users may join the Session simply by entering the same Session name and hitting "JOIN".
All users connected have complete control over the machine, except that only the Server user may load/change media files (ROMs). All features of the emulator work during NetPlay!
Any Client user may leave the Session at any time, but only the Server user may end the Session completely.
Be careful not to make your Session name public! Anyone that knows your Session name will be able to join it while its active. Send the session name only to people you want to invite.
Another way of sharing your Session to users is sending them a link that will open the emulator and join the session automatically.
In the NetPlay! dialog, once you are Hosting a Session, there will be a link button on the upper right, that will generate the link and copy it to your clipboard.
**IMPORTANT:** NetPlay! performance is completely dependent on the network quality. The lower the network latency between users, the better. Higher bandwidths with higher latencies won't help much.
It uses a specialized P2P protocol, and tries to use STUN to traverse NATs/routers so users don't have to worry about IPs and opening ports. Use at your own risk! :-)
To make all this work seamlessly, Javatari uses modern Web technologies including WebRTC, which are supported by all major browsers and platforms.
Unfortunately, those technologies are still not available on Apple iOS, so NetPlay! will not work on iOS devices. Sorry but there is not much we can do about it, until Apple feels it should allow its customers to access those technologies.
## Javatari Configuration and Launch Options
Several parameters are available for customizing the emulator. They can be changed either directly in Javascript if you are hosting the emulator in your own page, or via URL Query Parameters if you are creating links or bookmarks to open the emulator, or just using it in your browser.
@ -59,18 +119,20 @@ http://javatari.org?ROM=http://gamesarchive.org/StarCastle.zip&FORMAT=FA2
| `CARTRIDGE_CHANGE_DISABLED` | false | Block user from changing Cartridges
| `SCREEN_RESIZE_DISABLED` | false | Block user from changing Screen size
| `SCREEN_FULLSCREEN_MODE` | -1 | FullScreen mode. -2: disabled; -1: auto; 0: off; 1: on
| `SCREEN_FILTER_MODE` | -1 | Screen CRT Filter level. -2: browser default; -1: auto; 0..3: smoothing level
| `SCREEN_CRT_MODE` | -1 | Screen CRT Phosphor Effect. -1: auto; 0: off; 1: on
| `SCREEN_FILTER_MODE` | -3 | Screen CRT Filter level. -3: user set (default auto); -2: browser default; -1: auto; 0..3: smoothing level
| `SCREEN_CRT_MODE` | 0 | Screen CRT Phosphor Effect. -1: auto; 0: off; 1: on
| `SCREEN_DEFAULT_SCALE` | -1 | Screen size. -1: auto; 0.5..N in 0.1 steps
| `SCREEN_DEFAULT_ASPECT` | 1 | Screen aspect ratio (width) in 0.1 steps
| `SCREEN_CANVAS_SIZE` | 2 | Internal canvas size factor. Don't change! :-)
| `SCREEN_CONTROL_BAR` | 1 | Screen Bottom Bar controls. 0: on hover; 1: always
| `SCREEN_FORCE_HOST_NATIVE_FPS` | -1 | Force host native video frequency. -1: auto-detect. Don't change! :-)
| `SCREEN_VSYNCH_MODE` | 1 | V-Synch mode. -1: disabled; 0: off; 1: on
| `AUDIO_MONITOR_BUFFER_BASE` | -1 | Audio buffer base size. 2: disable audio; -1: auto; 0: platform default; 1..6: base value. More buffer = more delay
| `SCREEN_VSYNCH_MODE` | -2 | V-Synch mode. -2: user set (default on); -1: disabled; 0: off; 1: on
| `AUDIO_MONITOR_BUFFER_BASE` | -3 | Audio buffer base size. -3: user set (default auto); -2: disable audio; -1: auto; 0: browser default; 1..6: base value. More buffer = more delay
| `AUDIO_MONITOR_BUFFER_SIZE` | -1 | Audio buffer size. -1: auto; 256, 512, 1024, 2048, 4096, 8192, 16384: buffer size. More buffer = more delay. Don't change! :-)
| `AUDIO_SIGNAL_BUFFER_RATIO` | 2 | Internal Audio Signal buffer based on Monitor buffer
| `AUDIO_SIGNAL_ADD_FRAMES` | 3 | Additional frames in internal Audio Signal buffer based on Monitor buffer
| `TOUCH_MODE` | 0 | Touch control. -1: disabled; 0: auto; 1: enabled at port 1; 2: enabled at port 2
| `PADDLES_MODE` | -1 | Paddle controls. -1: auto; 0: off; 1: on
| `TOUCH_MODE` | -1 | Touch controls. -1: auto; 0: disabled; 1: enabled; 2: enabled (swapped)
| `RESET` | 0 | If value = 1 clear all saved data on the client
| `PAGE_BACK_CSS` | -- | CSS to modify page background color. Applied to the body element

View file

@ -4,7 +4,7 @@ module.exports = function (grunt) {
pkg: grunt.file.readJSON("package.json"),
clean: {
init: ["temp", "release/alpha/5.0"],
init: ["temp", "release/stable/5.0"],
finish: ["temp"]
},
@ -143,17 +143,17 @@ module.exports = function (grunt) {
copy: {
standalone: {
files: [
{src: "temp/index.html", dest: "release/alpha/5.0/standalone", expand: true, flatten: true, filter: "isFile"},
{src: "src/runtime/standalone/cache.manifest", dest: "release/alpha/5.0/standalone", expand: true, flatten: true, filter: "isFile"},
{src: "src/runtime/standalone/manifest.webapp", dest: "release/alpha/5.0/standalone", expand: true, flatten: true, filter: "isFile"},
{src: "src/runtime/images/files/logo-icon192.png", dest: "release/alpha/5.0/standalone/images", expand: true, flatten: true, filter: "isFile"},
{src: "src/runtime/images/files/logo-icon512.png", dest: "release/alpha/5.0/standalone/images", expand: true, flatten: true, filter: "isFile"}
{src: "temp/index.html", dest: "release/stable/5.0/standalone", expand: true, flatten: true, filter: "isFile"},
{src: "src/runtime/standalone/cache.manifest", dest: "release/stable/5.0/standalone", expand: true, flatten: true, filter: "isFile"},
{src: "src/runtime/standalone/manifest.webapp", dest: "release/stable/5.0/standalone", expand: true, flatten: true, filter: "isFile"},
{src: "src/runtime/images/files/logo-icon192.png", dest: "release/stable/5.0/standalone/images", expand: true, flatten: true, filter: "isFile"},
{src: "src/runtime/images/files/logo-icon512.png", dest: "release/stable/5.0/standalone/images", expand: true, flatten: true, filter: "isFile"}
]
},
embedded: {
files: [
{src: "src/runtime/embedded/index.html", dest: "release/alpha/5.0/embedded", expand: true, flatten: true, filter: "isFile"},
{src: "temp/javatari.js", dest: "release/alpha/5.0/embedded", expand: true, flatten: true, filter: "isFile"}
{src: "src/runtime/embedded/index.html", dest: "release/stable/5.0/embedded", expand: true, flatten: true, filter: "isFile"},
{src: "temp/javatari.js", dest: "release/stable/5.0/embedded", expand: true, flatten: true, filter: "isFile"}
]
}
}

2
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "Javatari",
"version": "5.0.98",
"version": "5.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,7 +1,7 @@
{
"name": "Javatari",
"title": "Javatari - The online Atari 2600 emulator",
"version": "5.0.98",
"version": "5.0.0",
"devDependencies": {
"grunt": "",
"grunt-contrib-clean": "",

View file

@ -11,7 +11,7 @@
<body>
<div id="javatari" style="text-align: center; margin: 20px auto 0;">
<div id="javatari" style="text-align: center; margin: 20px auto 0; padding: 0 10px;">
<div id="javatari-screen" style="box-shadow: 2px 2px 10px rgba(0, 0, 0, .7);"></div>
</div>

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
CACHE MANIFEST
# Version 5.0.98
# Version 5.0.0
# Stable
CACHE:

View file

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View file

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

File diff suppressed because one or more lines are too long

View file

@ -107,7 +107,7 @@ if (window.applicationCache) {
else window.applicationCache.addEventListener("updateready", onUpdateReady);
}
Javatari.VERSION = "5.0.98";
Javatari.VERSION = "5.0";
// Start pre-loading images right away
Javatari.preLoadImagesAndStart();

View file

@ -139,7 +139,7 @@ jt.CartridgeFormats = {
"FA2cu": {
name: "FA2cu",
desc: "32K CBS RAM Plus CU Image",
desc: "32K CBS RAM+ CU Image",
priority: 103,
tryFormat: function(rom) {
if (rom.content.length === 32768) {
@ -162,7 +162,7 @@ jt.CartridgeFormats = {
"FA2": {
name: "FA2",
desc: "24K/28K/32K CBS RAM Plus",
desc: "24K/28K/32K CBS RAM+",
priority: 102,
tryFormat: function(rom) {
if (rom.content.length === 24576 || rom.content.length === 28672 || rom.content.length === 32768) return this;
@ -207,7 +207,7 @@ jt.CartridgeFormats = {
"DPC": {
name: "DPC",
desc: "10K DPC Pitfall 2 (Enhanced Audio)",
desc: "10K DPC Pitfall 2 (Enhanced)",
priority: 101,
tryFormat: function(rom) {
if (rom.content.length >= (8192 + 2048) && rom.content.length <= (8192 + 2048 + 256)) return this;
@ -312,7 +312,7 @@ jt.CartridgeFormats = {
"AR": {
name: "AR",
desc: "8K-64K Arcadia/Starpath/Supercharger",
desc: "8K-64K Arcadia/Supercharger",
priority: 101,
tryFormat: function(rom) {
// Any number of parts between 1 and 8

File diff suppressed because one or more lines are too long

View file

@ -55,7 +55,9 @@ jt.CartridgeFormatDialog = function(screen, mainElement, atariConsole, cartridge
for (var i = 0; i < listItems.length; ++i) {
if (i < userFormatOptions.length) {
if (userFormatOptions[i] === format) optionSelected = i;
listItems[i].innerHTML = i === 0 ? "AUTO: " + autoOption.name : userFormatOptions[i];
listItems[i].innerHTML = i === 0
? "AUTO: " + autoOption.name + ": " + autoOption.desc
: userFormatOptions[i] + ": " + jt.CartridgeFormats[userFormatOptions[i]].desc;
listItems[i].classList.add("jt-visible");
} else
listItems[i].classList.remove("jt-visible");
@ -92,7 +94,7 @@ jt.CartridgeFormatDialog = function(screen, mainElement, atariConsole, cartridge
dialog = document.createElement("div");
dialog.id = "jt-cartridge-format";
dialog.classList.add("jt-select-dialog");
dialog.style.width = "280px";
dialog.style.width = "340px";
dialog.style.height = "310px";
dialog.tabIndex = -1;

View file

@ -534,7 +534,7 @@ html.jt-full-screen #jt-console-panel {
box-sizing: border-box;
}
#jt-cartridge-format.jt-select-dialog > ul li {
width: 220px;
width: 280px;
margin: 7px 0 2px 0;
}
#jt-cartridge-format.jt-select-dialog > ul li:first-child {
@ -553,15 +553,15 @@ html.jt-full-screen #jt-console-panel {
background-clip: content-box;
}
#jt-cartridge-format ul.jt-quick-options-list {
width: 220px;
margin: 18px 0 0 30px;
width: 230px;
margin: 18px 0 0 52px;
}
#jt-cartridge-format ul.jt-quick-options-list li div {
height: 24px;
line-height: 24px;
}
#jt-cartridge-format .jt-control {
width: 52px;
width: 60px;
line-height: 24px;
}
/* Firefox-specific rules */

View file

@ -11,7 +11,7 @@
<body>
<div id="javatari" style="text-align: center; margin: 20px auto 0;">
<div id="javatari" style="text-align: center; margin: 20px auto 0; padding: 0 10px;">
<div id="javatari-screen" style="box-shadow: 2px 2px 10px rgba(0, 0, 0, .7);"></div>
</div>

View file

@ -1,5 +1,5 @@
CACHE MANIFEST
# Version 5.0.98
# Version 5.0.0
# Stable
CACHE:

View file

@ -115,6 +115,7 @@
}
#javatari {
margin-top: 20px;
padding: 0 10px;
text-align: center;
}
#javatari-screen {
@ -231,7 +232,7 @@
<div class="container">
<script>Javatari.WEB_EXTENSIONS_PROXY_SERVER = Javatari.WEB_EXTENSIONS_SERVER;</script>
<p>Created by <a href="http://twitter.com/ppeccin" target="_blank">Paulo A. Peccin</a></p>
<p>v5.0.98 &nbsp;<a href="https://github.com/ppeccin/javatari.js" target="_blank">Docs & Project Homepage</a></p>
<p>v5.0 &nbsp;<a href="https://github.com/ppeccin/javatari.js" target="_blank">Docs & Project Homepage</a></p>
</div>
</div>

View file

@ -115,6 +115,7 @@
}
#javatari {
margin-top: 20px;
padding: 0 10px;
text-align: center;
}
#javatari-screen {

View file

@ -39,7 +39,7 @@
<div class="container">
<script>Javatari.WEB_EXTENSIONS_PROXY_SERVER = Javatari.WEB_EXTENSIONS_SERVER;</script>
<p>Created by <a href="http://twitter.com/ppeccin" target="_blank">Paulo A. Peccin</a></p>
<p>v5.0.98 &nbsp;<a href="https://github.com/ppeccin/javatari.js" target="_blank">Docs & Project Homepage</a></p>
<p>v5.0 &nbsp;<a href="https://github.com/ppeccin/javatari.js" target="_blank">Docs & Project Homepage</a></p>
</div>
</div>

View file

@ -122,7 +122,7 @@
<script src="../src/main/Configurator.js"></script>
<script src="../src/main/Launcher.js"></script>
<div id="javatari" style="text-align: center; margin: 2px auto 0;">
<div id="javatari" style="text-align: center; margin: 2px auto 0; padding: 0 10px;">
<div id="javatari-screen" style="box-shadow: 2px 2px 10px rgba(0, 0, 0, .7);"></div>
</div>