21 February 2024, 19:02 | #1 | |
Local Moderator
Join Date: Oct 2009
Location: Lancashire, UK
Age: 48
Posts: 1,730
|
CanDo General Help Thread
I thought I'd start this thread in case anyone out there wants to try out the multi-media creator CanDo.
There are quite a few things I discovered by trial and error, so if anyone wants advice or can share tips, that would be great. Installing: I found V3.0 on the EAB file server, or it could be on Archive.org. There may be other places like PlanetEmu etc. Once installed, run it, then quit. Then run the V3.008 update patch from Aminet. The update patch switches off the interlaced interface, so you might want to press the Config button, Screen, Cando - and click Interlace, and Save it - to switch it back on again. Quote:
This quote is from an old post. I tried to use the return command but it seems this doesn't appear in the Lexicon, and comes up with an error. I'm looking for a reliable way to loop the inputs so that the game checks for joystick inputs every few jiffies, but otherwise keeps the game rolling. I want to call the joystick function but I dont know how to do this, as the function is not a routine I can access? I can force the game to run in a while loop, but doing so locks me out of the interface, and the buttons, so there is no way to break out of it - causing the game to lock up. In an ideal world I would put Wait Until Joystick Arg2<>Nothing But I cant get my head around it. -- FYI - Some handy shortcut keys Main Window: RAmiga + 1 = Config RAmiga + 2 = Routines RAmiga + 3 = IFF Screen Grab RAmiga + 8 = Clear Window RAmiga + 9 = Clear Variables RAmiga + 0 = Clear Buffers Routine Editor: RAmiga + 1 = Expression Calculator RAmiga + 2 = Switch Events RAmiga + 3 = Lexicon Assistant (very useful!!!) RAmiga + 4 = Run Script RAmiga + 6 = Routines RAmiga + 7 = Run Debugger CTRL + F4 = Break (?) CTRL + F9 = Raise/Lower Script Editor Window Last edited by lifeschool; 21 February 2024 at 19:32. |
|
20 June 2024, 05:13 | #2 |
Registered User
Join Date: Jun 2019
Location: DFW
Posts: 120
|
Thanks, didn't realize AmiNet had CanDo update. But any chance do you have the English CanDo v3 manual?
EDIT NV, found it! https://www.retro-commodore.eu/amiga...e/?rceu_page=4 Last edited by FerociousAmiga; 20 June 2024 at 05:22. |
20 June 2024, 19:14 | #3 |
Local Moderator
Join Date: Oct 2009
Location: Lancashire, UK
Age: 48
Posts: 1,730
|
Yes, those two are the manuals I have as well.
There is nothing about V3 commands in those books, but here is the ful V3 commands list: Note: I think it is Alt+3 (or something) to bring up this text within the package. AbortDoubleClick Integer = Absolute({Number}) Real = ACos({Number}) AdjustPeriod {Period} ,{Channel} AdjustVolume {Volume} ,{Channel} Variable = Alias({VarName}) Logical = AnimationStatus Ansi = AnsiPressed Logical = AnyChangedBuffers AreaCircle {X}, {Y}, {Radius} AreaCopy {X}, {Y}, {Width}, {Height}, {DestX}, {DestY} AreaEllipse {X}, {Y}, {XRadius}, {YRadius} AreaPalette {X}, {Y}, {Width}, {Height} [,{Rows} [,{LowColor} [,{HighColor}]]] AreaPolygon {X1}, {Y1}, {X2}, {Y2}, {X3}, {Y3} [,up to six points] AreaRectangle {X}, {Y}, {Width}, {Height} AreaScroll {X}, {Y}, {Width}, {Height}, {DeltaX}, {DeltaY} Argument = Arg1 Integer = ArgCount Arguments <Varname>[={default}] [,<Varname>[={default}] ...] Integer = Ascii({String}) Angle = ASin({Number}) Name = AskForFileName({Def} [,{Title} [,{X} [,{Y} [,{W} [,{H}]]]]]) Nothing = AskForHelp({FileName} ,{NodeName}[, {PubScreen}] Select = AskForResponse({Message} [,{Title} [,{Choices}]]) FuncVar = AssignFunction({RoutineName}) NewFuncVar = AssignFunctionValue({FunctionVar}) Angle = ATan({Number}) AttachObject {ObjectName} [,{Arg1} [,up to ten arguments]] Audio {Logical} [,{Channel}] Integer = AvailableChipMemory Integer = AvailableFastMemory Integer = AvailableMemory BreakPoint BrushAnims {Logical} BufferType = BufferType({BufferName}) String = BumpRevision({CurrentRevision}) String = CanDoLegalNotice CardName = CardName Result = Case({Index}, {Expression1} [,up to ten expressions] ) CauseError {errorcode} String = CenterString({String}, {Length} [,{Fillstring}]) String = Char({Integer}) String = CharsToBegOfLine String = CharsToEndOfLine HexString = CharsToHex({String}) string = CheckBreakFlags Clear <flags> ClearClipRegions ClearWindow [{ColorReg}] ClipBrush {X}, {Y}, {Width}, {Height}, {BrushBufferName} [,<memflag>] ClipIconImage {IconBufferName}, {BrushBufferName} [,{AltBrushBufferName}] ClipPicture {PictureBufferName} [,<memflag>] Integer = ClipTransparentColor Close {BufferName} ClosePendingWindow ColorReg = ColorOfPixel({X}, {Y}) CopyDocumentTo {document} Value = Cos({Angle}) Value = CosH({Value}) CreateBrush {BufferName}, {Width}, {Height}, {Depth} Text = CurrentListenTo String = CurrentSongName Integer = CurrentSongTempo Integer = CurrentSongType Integer = CurrentSongVolume Text = CurrentSpeakTo CycleColors {FromColorReg},{ToColorReg}[,<directionflags>] String = DeckName FilePath = DefaultTool({IconBufferName}) RadianAngle = DegToRad({DegreeAngle}) Delay {Minutes}, {Seconds}, {Jiffies} Delete <flags>[,{Count}] DeleteArrayEntry <ArrayVar>, {ArrayIndex} DetachObject {ObjectName} DisableObject {ObjectName} Dispose <VarName1> [,<VarName2> [,up to ten VarNames]] DisposeAll Do {RoutineName} [,{Argument1} [,up to ten arguments]] value = Do({RoutineName} [,{Arg1} [,up to ten arguments]]) DocBufName = DocumentName DoObjectScript {ObjectName},<ScriptType> [,{Argument1} [,up to ten arguments]] DoOnError {RoutineName} [{Argument1} [,up to ten arguments]] Dos {DOSCommandLine} [,<STDOUT>] DrawBorder {X}, {Y}, {Width}, {Height}, <borderflags> [,{Pen1} [,{Pen2}]] DrawCircle {X}, {Y}, {Radius} DrawEllipse {X}, {Y}, {XRadius}, {YRadius} DrawLine {X1}, {Y1}, {X2}, {Y2} DrawPixel {X}, {Y} DrawPolygon {X1}, {Y1}, {X2}, {Y2}, {X3}, {Y3} [,up to six points] DrawRectangle {X}, {Y}, {Width}, {Height} DrawTo {X}, {Y} String = DupeString({String}, {Count}) Echo [{String} [,<NOLINE>]] Else ElseIf {Logical} EnableObject {ObjectName} [, {Switch}] EndIf EndLoop Integer = ErrorCode Integer = ErrorLineNumber String = ErrorObjectName String = ErrorObjectType Logical = Errors String = ErrorScriptName String = ErrorScriptType String = ErrorSourceLine String = ErrorText Result = Evaluate({Expression}) Result = EvaluateExpression({Expression}) Logical = Exists({FilePath}) ExitLoop ExitScript [{Result}] Value = Exp({Value}) Logical = False FastFeedback {Logical} FileName = FileOf({FilePath}) FileReadChars {FileReadBufferName}, <VarName>, {Count} [,<HEX>] FileReadLine {FileReadBufferName}, <VarName> Integer = FileSize({FilePath}) String = FileType({FilePath}) FileWriteChars {FileWriteBufferName}, {String} [,{Count} [,<HEX>] FileWriteLine {FileWriteBufferName}, {String} FillToBorder {X}, {Y}, {ColorReg} FilterDocument {pattern} Integer = FindChars({SourceString}, {SearchString} [,{StartAtChar}]) Integer = FindWord({SourceString}, {SearchString} [,{StartAtWord} [,{WordDelimiters}]]) ArrayIndex = FirstArrayIndex(<ArrayVar>) FirstCard [{Arg1} [,up to ten arguments]] FloodFill {X}, {Y} Flush {BufferName} FlushAll String = FormatValue({Value}, {FormatString}) Value = Fraction({Number}) FrameNumber = FrameOfAnimation({BAnimBufferName}) Variable = GetArgs({String}, [,{Index}]) GetAttr {DocumentObject}, <Switch>, <AttrReturned> GetBrushAnimCoordinates {BAnimBufferName}, <XVarName>, <YVarName> GetBufferInfo {BufferName}, <Var1>[, <Var2>[, <Var3>[, <Var4>]]] Text = GetChars({String}, {StartingChar}, {NumberOfChars}) RecordVar = GetDBObjects GetDiskInfo {FilePath}, <NumberOfBlocksVar> [,<NumberUsedVar> [,<BytesPerBlockVar>]] GetFileInfo {FilePath}, <SizeInBytesVar> [,<NumberOfBlocksVar> [,<AttributesVar> GetFontInfo <Source>, <FontName>[, <FontSize>] GetInsertedLineColors <Foreground>, <AltForeground> GetLineAttribute <Attribute>, <color> GetPropPosition {ObjectName}, <HorizPosVarName> [,<VertPosVarName>] GetPropRange {ObjectName}, <LowHorizVarName>, <HighHorizVarName> [,<LowVertVarName>, <HighVertVarName>] GetPropVisibleRange {ObjectName}, <DisplayHorizVarName> [,<DisplayVertVarName>] GetRGB {ColorReg}, <RedVar>, <GreenVar>, <BlueVar> ColorReg = GetScreenPen({Entry}) GetTextDimensions {String}, <WidthVarName>, <HeightVarName> [,<BaselineVarName>] GetTextExtent <string>, <width>, <height> GetTextFit <string>, <width>, <numchars> GetViewOffset <XVarName>, <YVarName> GetWindowLimits <MinWidthVarName>, <MinHeightVarName>, <MaxWidthVarName>, <MaxHeightVarName> String = GetWord({String}, {WordNum} [, {WordDelimiters}]) Global <VarName1>, [<VarName2>,... [up to 10 VarNames]] GotoCard {CardName} [,{Arg1} [,up to ten arguments]] GotoEndLoop String = HexToChars({HexString}) Integer = HexToInteger({HexString}) Logical = HiRes String = IconHighlight({IconBufferName}) String = IconType({IconBufferName}) If {Logical} IfError Result = IfThen({Logical}, {TrueExpression} [,{FalseExpression}]) Real = Infinity String = Input({Prompt}) InsertArrayEntry <ArrayVar>, {ArrayIndex} InsertBufferList InsertChangedBufferList String = InsertChars({SourceString}, {DestinationString} [,{StartAtChar}]) InsertDeviceList [<flags>] InsertDirectoryList [<flags>] InsertDocument {SourceDocumentName} [,{StartingLine} [,{LineCount}]] InsertEffectsList {Flags} InsertMessagePortList InsertPubScreenList InsertRecordNames <RecordVar> InsertStartingMessage InsertToolTypeList {IconBufferName} InsertVariableNames InstallClipRegion {X}, {Y}, {Width}, {Height} [,<methodflags>] Integer = Integer({Expression}) Integer = IntegerFrom({ObjectName}) HexString = IntegerToHex({Integer}) Logical = Interlace Integer = IntuitionVersion Logical = IsAlias(<VarName>) String = KeyPressed Integer = LargestChunkOfMemory ArrayIndex = LastArrayIndex(<ArrayVar>) LastCard [{Argument1} [,up to ten arguments]] String = LeftJustify({String}, {Width} [,{Fillstring}]) Integer = LengthOfLine Let <VarName>={Expression} [,<VarName>={Expression}, [...up to 10 VarNames with Expressions]] String = LibraryVersion Integer = Limit({MinLimit}, {MaxLimit}, {TestInteger}) Integer = LinesInDocument ListenTo {ARexxPortName} LoadBrush {FilePath} [,{BrushBufferName} [,<loadflags>]] LoadBrushAnim {FilePath} [,{BAnimBufferName} [,<loadflags>]] LoadDocument {FilePath} [,{DocumentBufferName} [,<loadflags>]] LoadIcon {FilePath} [,{IconBufferName} [,<loadflags>]] LoadPalette {FilePath} [,{PaletteBufferName} [,<loadflags>]] LoadPicture {FilePath} [,{PictureBufferName} [,<loadflags>]] LoadShape {BrushFile}[, {ShapeBuffer}[, <Options>]] LoadSound {FilePath} [,{SoundBufferName} [,<loadflags>]] LoadSubDeck {FilePath} [,{SubDeckBufferName} [,<ASNEEDED>]] Result = LoadVariable({FilePath}) Local <VarName1>[={value1}] [,<VarName2>[={value2}] ...] LockPalette [{FirstColor}[, {LastColor}]] Value = Log10({Value}) Value = LogE({Value}) Logical = Logical({Expression}) Loop [<LoopVar>, {Var1}[, {Var2}[, {Var3}] String = LowerCase({String}) MakeDocument {DocumentBufferName} MakeIcon {IconBufferName}, <flags>, {BrushBufferName} [,{AltBrushBufferName}] Integer = Match({ToLocate}, {MatchingData1} [,up to ten matching datas]) Integer = Max({Integer1}, {Integer2} [,up to ten integers]) Integer = MaxInteger Value = MaxValue Integer = MessageErrorCode Text = MessageReturned Integer = Min({Integer1}, {Integer2} [,up to ten integers]) Integer = MinInteger Value = MinValue Integer = MouseX Integer = MouseY MoveBrushAnim {BAnimBufferName}, {XVel}, {YVel} [, {XAccel}, {YAccel}[, {Frames} [,<flag>]]] MoveBrushAnimTo {BAnimBufferName}, {DestX}, {DestY} [,{Frames} [,<flag>]] MoveCursor <directionflags> [,{Count}] MoveCursorTo <flags> [,{Count}] MoveObject {ObjectName}, {X}, {Y} MovePen {X}, {Y} MoveScreen {DeltaX}, {DeltaY} MoveWindow {DeltaX}, {DeltaY} NewLine ArrayIndex = NextArrayIndex(<ArrayVar>, {ArrayIndex}) NextCard [{Argument1} [,up to ten arguments]] Logical = No Nop Real = NotANumber Nothing = Nothing Logical = NTSC Integer = NumberOfArrayEntries(<ArrayVar>) Integer = NumberOfChars({String}) Integer = NumberOfWords({String} [,{WordDelimiters}]) Logical = ObjectAttached({ObjectName}) String = ObjectName Logical = ObjectState({ObjectName}) Logical = Off Logical = On Result = OpenDeck({DeckName} [,{string1}... [up to 10 Arguments]] OpenFile {FilePath}, {FileIOBufferName}, <IOflags>, <AccessFlags> OpenRequester {SubDeckBufferName}, {CardName} [,{Arg1} [,up to ten arguments]] OpenWindow {SubDeckBufferName}, {CardName} [,{Arg1} [,up to ten arguments]] PathName = ParentOf({PathName}) FilePath = PathAndFile({PathName}, {FileName}) PathName = PathOf({FilePath}) Boolean = PatternMatch({String}, {Pattern}) ColorReg = PenA ColorReg = PenB ColorReg = PenO Perform {String} PerformDocument {Document} Real = Pi PlaySong {filename or filepattern} [, WAIT CONTINUOUS] PlaySound {SoundBufferName} [,<audioflags> [,{PeriodRate}]] PlaySoundSequence {DocumentBufferName} [,<audioflags> [,{PeriodRate}]] Pointer {Logical} Integer = PositionOfWord({String}, {WordNum} [,{WordDelimiters}]) PositionOnLine {LineNumber} Integer = PreviousArrayIndex(<ArrayVar>, {ArrayIndex}) PreviousCard [{Arg1} [,up to ten arguments]] PrintScreen [{x} [,{y} [,{width} [,{height}]]]] PrintText {String} [, {X}, {Y}] PrintWindow [{x} [,{y} [,{width} [,{height}]]]] Boolean = PubScreenExists({ScreenName}) String = QualifiersPressed Quit [{Result}] DegreeAngle = RadToDeg({RadianAngle}) RamScram Integer = Random({MinimumInteger}, {MaximumInteger}) Integer = RawKeyCode RayTo {X}, {Y} Real = Real({expression}) ReattachObject {ObjectName} [,{Arg1} [,up to ten arguments]] RecreateMask {BufferName} [,{TransparencyColor}] RefreshObject {ObjectName} RemoveBrushAnim {BAnimBufferName} String = RemoveChars({String}, {StartAtChar}, {NumberOfChars}) RenderTo <TypeOfRender> [,{BufferName}] Replace {SearchString}, {ReplaceString} [,<flags>] ReplaceAttribute <Switches>, {Old} ,{New} ReplyARexxWith <flag> [,{Message or ErrorCode}] ResetBrushAnimFrame {BAnimBufferName} [,{FrameNumber}] ResizeWindow {Width}, {Height} ReverseDocument String = RightJustify({String}, {Length} [,{Fillstring}]) Value = Round({Value} [,{DigitPlace}]) |
20 June 2024, 19:15 | #4 |
Local Moderator
Join Date: Oct 2009
Location: Lancashire, UK
Age: 48
Posts: 1,730
|
SaveAllChangedBuffers
SaveBrush {BrushBufferName} [,{SaveFilePath}] SaveDocument {DocumentBufferName} [,{FilePath} [,<flags>]] SaveIcon {IconBufferName} [,{SaveFilePath}] SavePicture {PictureBufferName} [,{SaveFilePath}] SaveVariable <VarName>, {FilePath} Integer = ScreenAddress Integer = ScreenColors Integer = ScreenHeight Integer = ScreenModeID String = ScreenTitle ScreenTitleBar {Logical} ScreenTo <flags> Integer = ScreenWidth Integer = ScreenX Integer = ScreenY ArrayIndex = SearchArray(<ArrayVar>, {DataToSearchFor} [,{KeyString} [,{StartAtIndex}]]) SearchFor {SearchString} [,<flags>] SearchForAttribute <Switch> ,{Value} Logical = SearchFound SendMessage {Message} [,<flags>] SendToParentDeck [{Argument1} [,up to ten arguments]] SendToSubDeck {SubDeckBufferName} [,{Argument1} [,up to ten arguments]] SetAreaDrawMode <flags> SetAttr {ObjectName}, <Switch>, {value} SetAutoFileRequester {Logical} SetAutoLoadFlags <flags> SetBrushAnimFlags {BufferName}, <flags> [,{PlayTicks}] SetBusyPointer [{BrushBuffer} [,{XHotSpot}, {YHotSpot}] SetChannel {ChannelNumber} SetClipTransparentColor {ColorReg} SetCurrentDirectory {PathName} SetDBObjects <RecordVar> SetDefaultTool {IconBufferName}, {ToolString} SetDrawMode <drawflags> SetEffect <efxmode> ,{Argument1} [,{Argument2}] SetExpression <flags> SetFileBufferSize {KiloBytes} SetFileRequestMode <type>,<flags> SetFileRequestPattern {Initial} [,{Accept} [,{Reject}]] SetIconHighlight {IconBufferName}, <flags> [,{AltBrushBufferName}] SetIconImage {IconBufferName}, {BrushBufferName} [,{AltBrushBufferName}] SetInsertedLineColors {foreground}, {altforeground} SetInteger {ObjectName}, {Integer} SetLineAttribute <Switch>, {color}[, {number of lines}] SetObjectState {ObjectName}, {Logical} SetPen {PenAColorReg} [,{PenBColorReg} [,{PenOColorReg}]] SetPointer [{BrushBufferName} [,{XHotSpot}, {YHotSpot}]] SetPrintFont {FontName}, {PointSize} SetPrintStyle <styleflags> [,{ExtraPen1} [,{ExtraPen2}]] SetPromotion ON|OFF SetPropPosition {ObjectName}, {HorizPos} [,{VertPos}] SetPropRange {ObjectName}, {LowHoriz}, {HighHoriz} [,{LowVert}, {HighVert}] SetPropVisibleRange {ObjectName}, {DisplayHoriz} [,{DisplayVert}] SetRGB {ColorReg}, {RedValue}, {GreenValue}, {BlueValue} SetScreenTitle {String} SetSearchArrayFlags <flags> SetSongTempo {tempo} SetSongVolume {volume} SetStandardOut {FileWriteBufferName} SetSystemRequesterTo <WINDOW | WORKBENCH | NOWHERE> SetText {ObjectName},{String} SetToolTypeList {IconBufferName}, {DocumentBufferName} SetViewOffset {X}, {Y} SetVolume {Integer} [,{ChannelNumber}] SetWindowBrushAnimTPS {TicksPerSecond} SetWindowLimits {MinWidth}, {MinHeight}, {MaxWidth}, {MaxHeight} SetWindowTitle {String} SetWordDelimiters {WordDelimiters} ShowBrush {BrushBufferName}, {X}, {Y} [,<paletteflags> [,{MinTermValue}]] ShowBrushAnim {BAnimBufferName}, {XCoor}, {YCoor} [,{NTimes}] ShowBrushEfx {buffer}, {dx}, {dy}, {efx}, {speed} [, {dw}, {dh}[, {sx}, {sy}, {sw}, {sh}]] ShowPalette {PaletteBufferName} ShowPaletteEfx {Efx}, {Duration} [, {Buffer}] ShowPicture {PictureBufferName} Integer = Sign({Value}) Value = Sin({Angle}) Value = SinH({Value}) Integer = SizeOfDocument Song <switches> SortArray <ArrayVar>, <flags> [,{KeyString}] SortDocument <flags> [,{StartingColumn}] SpeakTo {ARexxPortName} SplitLine [{Count}] Value = SquareRoot({Value}) Logical = StartedFromWorkbench Static <VarName1>[={value1}] [,<VarName2>[={value2}] ...] StopScript [{Result}] String = String({Expression}) Logical = Supervised SystemControl <Option> [, {Value}] Value = Tan({Angle}) Value = TanH({Value}) String = TextFrom({ObjectName}) String = TextFromDocument({DocumentName}) String = TheCharacter Integer = TheColumnNumber Logical = TheCommandLine PathName = TheCurrentDirectory String = TheDate String = TheDrawMode String = TheLine Integer = TheLineNumber String = TheMessage Name = TheOriginDirectory String = TheTime String = TheWord String = TheWordDelimiters Integer = TimeLeftOnChannel({ChannelNumber}) Integer = TotalAllocatedMemory Transparent {Logical} Logical = TransparentStatus String = TrimString({String}) Logical = True Type {String} [,<flag>] UnlockPalette [{FirstCol}[, {LastCol}]] Until {Logical} Integer = UnusedAllocatedMemory String = UpperCase({String}) UseColoredLines {boolean} Boolean = UsingColoredLines Logical = ValidReal({Real}) String = VarType(<Var>) Logical = VerifyExpression({String}) While {Logical} Value = Whole({Expression}) Integer = WindowAddress Integer = WindowBorderBottom Integer = WindowBorderLeft Integer = WindowBorderRight Integer = WindowBorderTop Integer = WindowColors Integer = WindowHeight String = WindowName String = WindowOnFrontScreen String = WindowTitle WindowTo <flags> Integer = WindowWidth Integer = WindowX Integer = WindowY Integer = WorkbenchColors Integer = WorkbenchHeight Integer = WorkbenchWidth WorkWithDocument {DocumentBufferName} Logical = Yes |
24 June 2024, 17:06 | #5 |
Local Moderator
Join Date: Oct 2009
Location: Lancashire, UK
Age: 48
Posts: 1,730
|
btw, in case anyone is reading this, here are some quick tips.
1. Use the Settings Options to move the most common tools to the (the top of the list), to appear Left on the main view screen, and also the script editor. The most common tools on the main screen are: Text, Button, Routines, Variables, GamePort, Timer, Document, Field and Prop Gadget. If you put these examples to the top of the list, it will save a lot of time. Same with the script editor window. Things like Routines, Cards, Text , Picture, Paint, Objects, Variables, Co-Ords etc, need to be near the top. File Req can also be at the top, as this is used to insert file paths, and saves a lot of time to use it. 2. If you press Right-Amiga and 3, it brings up the Lexicon Assistant. Here you can look at all the commands. Double click on them to add the syntax to your code. It certainly saves time looking through the manual. Enter search terms like this example: #?show#? - this will list all the commands with the term 'show' in them e.g. ShowBrush. 3. Press Right-Amiga and 4 to run the script page on its own. This will perform the page script outside of your main program, which can be faster, and shows up any bugs more quickly sometimes, than using the main browse function. Although if the code relies on other things to be running, or variables to be set up, your code might not run fully in this mode. The package will come up with a warning about possible crashes, but in my experience, I have never known the script launch function to cause any crashes. It simply comes up with an error in the code. 3. Don't ignore the Error tool on the main screen. Click this and enter something, e.g. PrintText "Something Went Wrong!", 150, 200. This will then appear instead of the computer crashing and the app shutting down. And often this means you dont lose your work when something unexpected happens. 4. The GamePort timer is buggy, Especially if you use more than one card in your code. If you use one card to do everything, there are less issues but still it is a problem. Because if you continue to edit code while the gameport timer is switched on, the app will eventually come up with errors and corrupt the code, and then crash. If you saved your code before the crash, when you reload it, it will crash again. Instead, if you have to use the gameport timer, make sure to only switch it on when you have saved your code as a new updated version, and want to test it out. Then quickly switch it off again as soon as you return to the editor. To be abolutely sure, I now always reset the Amiga after using the gameport timer, and load everything up cleanly, as it's not worth the risk of corrupted code and looping crash instances, each time you load up your code. Similarly, never save the code with the gameport timer enabled, unless it is for a separate test instance (e.g. make another revision e.g. 1.1D, and after the test, load up V1.1C, without the timer enabled), or for a final release (and even then, never save the final version with the timer on, save it as V1.0.source and V1.0.executable). Instead, just make sure Jiffies are set to Zero in the gameport panel. This bug does not affect the script routine from the gameport, only the auto polling to repeatedly execute the gameport script. The workaround is simply to use the normal timer to execute a script instead. You can even use the timer tool to execute the user gameport script, ignoring the gameport timer completely, with DoObjectScript "UserGamePort_1", Occurred - but you may have to deactivate the timer initially, and activate it with the ReattachObject command. 5. If you are using the mouse, the left mouse button will only work if you are clicking on a button. The right mouse button will only work if you assign a dropdrown menu, or use the Right Mouse Button tool on the main screen. If you want to auto-track the mouse, it is best to use the normal Timer tool. Let X=mouseX and Y=mouseY within the timer routine, executed every 4 or 5 jiffies. If you add a full screen button, you can then assign hit points to a bitmap area, and trigger things using a context hover and click system. e.g. Code:
Let width=hitx+14 Let height=hity+34 If x=>hitx and x<=width and y=>hity and y<=height Let Hit=1 Code:
Do "checkhit" If Hit=1 Let Guys=Guys-1 If Guys>0 ShowBrush "Back",0,0 ; show health Do "enemies" EndIf If Guys=0 Let Count=Count+1 ; increase the level number Do "select" ; to select next level based on the new level number EndIf EndIf If Hit=0 ; Do "missed shot" EndIf 6. If you want to look at code, while looking at a page of code, click the Routines tool in the script editor. Double click on the routines listed to show them on the screen, on top of your existed editor window. In this way, it is possibe to look up some code in one routine, close the window, and return to the routine where you want to insert it. You can stack a huge number of code screens, but it becomes difficult to navigate above 2 or 3. 7. Objects with transparent images will flicker if you move them, but solid images with no transparency, wont. Buttons can't do transparencies. So if you want to transparent image on the screen, you'll have to show it or load it as a brush, and move that around with MoveBrush, rather than MoveObject. 8. Be careful with While Loops, because if the loop cannot end, the software will simply soft-lock forever. The only way I have found to get around this, is to toggle back to Workbench (Right-control+M), and then run the ShutDownADeck tool in the WBUtilities drawer. 90% of the time, if you run this, the loop will terminate and return you to the console. If not, the whole package will quit. 9. Make a new file each time you make a change. I know this sounds boring, but if the tool crashes, it means you wont lose too much. The package can quit and crash more often if you use Fields, the Prop_Gadget, and the GamePort timer. I think it tries to save your file to a crash directory, but I dont know where this is. Why would you want to load up code which makes the computer crash again? Instead, load up a previous version which works, and try to find why the crash happens in the first place. On rare occasions with the Gameport Timer, it introduced a crash bug early on, say V5, and by V8 the code is trashed. All you can do is load up V5, and add in all the routines you saved from V8, and then save it as V8.1. 10. The more buttons you add, the slower and less responsive the final code will be. After 5 buttons there is a notable slow down. With 10 buttons, it is slower. After that, it starts to affect input lag. So you will either have to use context driven buttons (one huge one instead of smaller ones), or stick to brushes. If a brush looks like a button, and performs the same functions (e.g. because there is an invisible button behind it), then you can have brushes instead. 11. Remember, when you move a brush or button, it will leave the previous position on screen as well. Clearing the screen (or using flood fill) takes ages, so instead, either draw a box over the affected area, or draw a picture or brush on top of it before you move the button or brush. The movement will cause flicker if you try to do this quickly, but if you use non-transparent brushes and screens, things will at least look reasonable. 12. CanDo can often be a bit fussy when it comes to using big screen modes. Most of the time, the app will refuse to launch in a big screen mode. The only way is to click the screen options tool (the one next to the cards stack) and load up your background using this tool instead. The background can be blank, as long as it is in the right aspect, e.g. 640 x 512 @ 16 cols, or 1280 x 1024 @ 4 cols. The screen will then maintain this aspect once it has loaded, and anything you put on the screen will use this mode. 13. There is no way (I dont think) to remove the HAM Bleed if you place one HAM image over another. Even if you use matts, it still does it. The only way is to move the overlay image around until you find a position where the effect of the HAM bleed is not so bad. Or, simply make a new picture, with both images merged onto the same picture, without using any overlays. Last edited by lifeschool; 24 June 2024 at 18:59. |
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Help with CanDo routines | fstltna | support.Apps | 2 | 10 March 2023 19:18 |
Cando 3.0 Crash | bigpoppa206 | support.Apps | 2 | 13 January 2019 11:19 |
Looking for CANDO... | astuermer | support.Apps | 3 | 09 November 2018 20:23 |
CanDo v3.0 | otro | request.Apps | 29 | 24 July 2014 17:05 |
Looking for manuals for Scala IC400 and CanDO. | mugo | request.Apps | 5 | 09 November 2010 15:42 |
|
|