Eng:Panther (Scratch Modification)

Panther is a Scratch Modification that offers better manipulation (such as blocks that create, move, show, and hide lists and variables), has the ability to clone and delete sprites, and offers external file manipulation.

History
Panther was devised after a group of programmers got together in an attempt to make up for some of the features they felt Scratch lacked. It is understandable why Scratch would not have many of Panther's features as it is designed to be easily grasped and too many features would make it harder to get the hang of it. Panther is therefore designed for people who have already used Scratch, rather than as a starting point for programmers. The first version was released in April 2010.

Recently, not much of the development and work on new things is going on. It is unknown why this mod is being permanently abandoned, possible reasons are that the developers are spending time on other interests or are on a hiatus. The download link on Panther's official site is now broken and a copy owned by powerpoint56 is available.

Staff
The following people are working on Panther:
 * nXIII - Head programmer
 * Markyparky56 - Programming/research
 * MathWizz - Java applet programmer
 * ProgrammingFreak - Programmer
 * Sparks - Site master/advertising/programming adviser.
 * Sperry - Programmer/adviser.
 * SeptimusHeap - Programmer/founder (not working on 1.1)

The official Panther "meet the developers" page is here.

New Features
The following features are available in Panther 1.0:

Motion

 * [make draggable] Makes the sprite draggable online/in full-screen
 * [make undraggable] Makes the sprite undraggable online/in full-screen
 *  Reports if the sprite is draggable (true) or not (false).

Control

 * "When sprite1 created" hat This new hat is triggered in a clone sprite when it is created.
 * [clone] Clones the sprite, including costumes, scripts and local variables.
 * [delete] Deletes any cloned sprite. Does not delete a sprite that is not cloned to avoid accidental deletion.
 * "when key [ ] pressed" Hat has added keys. (See sensing)

Looks
(same as above block)
 * [replace costume with|dropdown|] Replaces the specified costume with a new one.
 * camera
 * stage
 * paint
 * import
 * [add costume|dropdown|] Adds a new costume
 * do while camera open (loop block) Opens the webcam connection at the beginning of the mouth and closes it when the loop is done.
 *  Boolean reporter stating the camera connection state
 * ([color] effect) Reporter block that will show the value of any chosen graphic effect. Drop down selection included.
 * saturate |
 * pointilize| These two obsolete graphic effects have been resurrected.
 *  Boolean reporter that shows if a sprite is showing or hidden.
 * [paint new costume] Opens the paint editor and gives the finished drawing to the sprite as a costume. useful for importing images.
 * [change stretch by]/[change Vstretch by] changes the horizontal and vertical size of a sprite respectively.
 * [set stretch to]/[set Vstretch to] sets the horizontal and vertical size of a sprite respectively.
 * (stretch)/(Vstretch) Report the current values of Stretch and Vstretch respectively.

Stage only:
 * [change pan by] Pans the stage along the X axis.
 * [set pan to] Sets the stage to a set position.
 * [change Vpan by] Pans the stage along the Y axis.
 * [set Vpan to] Sets the stage to a set position.

Sensing

 * [Set sprite name to [ ]] Allows the sprite's name to be changed in the script.
 * (sprite name) Reports the sprite's name
 *  Boolean reporter stating if a sprite is a clone or not.
 *  Now has the keys Ctrl, Shift, Alt, Cmd, Opt, Backspace, Esc, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12 added.
 * (key pressed) Reports the currently pressed key.
 * [ask [ ] in dialog] Acts like the Ask block, but opens it in a dialog box on the screen.
 * [show dialog[info] with text[ ]] Shows a dialog box with a heading and message of your choice.
 * (date/time[↓]) Reports the date or time from the computer clock. drop down menu provides selection.
 * time |
 * hour |
 * minute |
 * second |
 * date |
 * day of month|
 * day of year |
 * weekday |
 * weekday-# |
 * month |
 * month-# |
 * year |

Operators

 * ( ^ ) Reports number in box 1 to the power of number in box 2
 * Reports true
 * reports false
 * <[string] as a boolean> turns a string into "true" unless the string is "false"
 * (if < > then [ ] else [ ]) Reports the string in box 1 if the boolean is true, and the string in box 2 if the boolean is false.
 *  then < > else < >> Reports the truth of the then boolean if the first boolean is true, else reports the truth of the else boolean.
 * (letters (1)-(5) of [string]) Is an advanced version of the (letter of ) block.
 * (pi) (drop down block) Reports the value pi to 15 significant figures. drops down to blocks below:
 * (e) Reports the value of e to 15 significant figures.
 * (newline) Is a special "character" that causes a new line to start in a speech bubble, list, .txt document or dialog box.
 * (index of [o] starting at (6) in [hello world]) reports the position of the letter (s) in a selected string, staring from the set position.

Pen

 * [!pen color!] This block reports the current pen color, as a color and can drop into a color square.

Variables

 * [move [a variable] to x: y:] Sets the selected variable to the new grid coordinate.
 * [make [a variable]] Creates a new variable.
 * [make [a variable] with value[ ]] Creates a new variable with a value.
 * ([a variable]) Reports the value of the variable selected from the drop down menu. Also has the option to insert a string for variables that may be created later.
 * [set layout of[a variable] to[slider]] Changes the watcher type between slider, normal and large.

Lists

 * [make list [a list]] Creates a new list.
 * [delete list [a list]] Deletes a list.
 * [show list[a list]] Shows the list selected from the drop-down menu.
 * [hide list[a list]] Hides the list selected from the drop-down menu.
 * [make a block] (button) lets people with knowledge of Squeak program their own block into Panther, it will export and run anywhere it is sent. (warning message before it runs)

Files
This is a new category.
 * (contents of file [ ]) Reports the contents of the specified file. It can read any .txt file. A path must be given, unless it is in the Panther folder, which is the default path.
 * (lineof file[ ]) Reports the contents of the specified line in the specified file.
 * (number of lines in file [ ]} Reports the number of lines the specified file contains.
 * (contents of file at URL[ ]) Reports the content of the specified web page.
 * (lineof file at URL[ ]) Reports the Contents of the specified line if the specified URL address.
 * (number of lines in file at URL[ ]) Reports the number of lines the specified web page contains.
 * [write [ ] to file [ ]) Will write the inserted string to the end of the specified file. (does not write to online pages for obvious reasons)
 * [clear file [ ]) Clears the entire file.
 * [host mesh] Opens the mesh port and begins a mesh hosting session.
 * [join mesh [ ]] joins a mesh at the inserted IP address.
 *  states whether the project is hosting mesh or not.
 * [leave mesh] Closes the mesh connection if there is one. This works for both the host and the client.
 * (mesh IP address) Reports your IP address.

Colors



 * {make a color} Button like "make a variable" but this makes a new color "variable".
 * {delete a color} Button like "delete a variable" but the deletes a color "variable"
 * [![a color]!] Reports the color of the selected color variable (or CV for short) from a list of existing CV's
 * [set [a color] to ◙] Sets the CV to the chosen color.
 * [make color[a color]] Makes a new CV
 * [delete color [a color]] Deletes an existing CV
 * [!color r:g:b:!] reports the color that the red, green and blue values make.
 * (◙ red) Reports the amount of red in that color (as a number.)
 * (◙ green) Reports the amount of green in that color (as a number.)
 * (◙ blue) Reports the amount of blue in that color (as a number.)


 * [!color h:s:b:!] reports the color of that hue, saturation and brightness.
 * (◙ hue) Reports the hue of that color.(as a number.)
 * (◙ saturation) Reports the saturation of that color.(as a number.)


 * (◙ brightness) Reports the brightness of that color.(as a number.)
 * [!mix ◙ with ◙!] Mixes the two colors and reports them as a CV.
 * [!mix ◙ (10):(10) with ◙!] Mixes the two colors to the specified ratio.
 * [!color of pixel x:y:!] reports the color of the pixel at the specified grid position (finally making a paint project with color picker possible).
 * (◙ as string) reports the color as a string.
 * [![#FFFFFF] as color!] Turns the hexadecimal color value into a color.
 * [!color named [black]!] reports the color value of the selected color.

CYOB
CYOB stands for "Code your own block" and allows users with more advanced knowledge of Squeak to write their own working blocks into Panther.

How to Use it
Custom blocks are written in a window that can be accessed from the bottom of the variables tab by clicking "make a new block".

In the window that pops up, you can type code to make new blocks. Here are two quick examples to give you an idea how to use it:

The long, one line box at the top contains the block name. Type "record sound" into it for the first example, "report $String$" for the second.

The small square box in the top right contains a single character that defines the block type. "-" is a stack, "r" is a reporter, "b" is a boolean, "c" is a mouth and "g" is a color reporter. For the first block, put -, and put r for the second.

The final large text box is where the code for the block goes. This is normal Squeak code. To make the blocks work, type "self recordSound" in for the first block and type "^ t1" for the second.

If done correctly you should have two new blocks at the bottom of the variables tab. The first opens the sound recorder and the second reports the value inserted into the string argument.

Here is a conversion table for the most commonly used arguments:
 * to
 * to
 * to
 * to

Other New Features

 * remaking the %v argument to fit the new variable manipulation features. %v arguments now accept reporter blocks and have the ability to be typed into (used for variables created and deleted in the code)
 * Having the variable blocks are now available regardless of whether or not a user variable has been created. The "delete a variable" button, however, is shown only when at least one user variable exists.
 * Providing the same functionality for variables to lists.
 * A new menu (Mesh) providing mesh functionality
 * Two new categories: Files and Colors, the former being a small category containing file blocks such as reading/writing files and also URL functions, the latter being a category for blocks that allow advanced pen and coloring controls.
 * File commands that warn the user about the risk of allowing file writing and giving him/her the option to cancel the operation or set a default (also accessible from the file menu)
 * The "delete me" block, which only works on sprites that are clones to prevent accidental deletion of a non-clone sprite.
 * Creating a new costume no longer snaps the costume menu tab back to the top, something that will allow large collections of costumes can be created faster.
 * Areas with a scrollbar can be dragged with the mouse.
 * Block graphics quality choices. Low quality for faster rendering, useful for large projects and slow computers, normal is the original scratch block design and high is a high quality block style that looks very nice.